Add dataflow documentation graphs

pull/35/head
Lennart Spitzner 2017-05-10 21:35:13 +02:00
parent bb7a92bf2b
commit 7775812cfd
7 changed files with 947 additions and 0 deletions

287
doc-svg-gen/Main.hs Normal file
View File

@ -0,0 +1,287 @@
{-# LANGUAGE OverloadedStrings #-}
module Main(main) where
import Control.Monad
import Data.GraphViz
import Data.GraphViz.Types
import Data.GraphViz.Types.Generalised
import Data.GraphViz.Types.Monadic
import Data.GraphViz.Printing
import Data.GraphViz.Attributes
import Data.GraphViz.Attributes.Complete
import qualified Data.GraphViz.Attributes.HTML as HTML
import Data.GraphViz.Commands
import qualified Data.Text.Lazy.IO as Text.Lazy.IO
import Data.Text.Lazy ( Text )
import qualified Data.Text.Lazy as Text.Lazy
dataTransformationLabeled :: n -> Text -> [(n, Maybe Text)] -> [n] -> DotM n ()
dataTransformationLabeled name labelText inputs outputs = do
node
name
[ shape PlainText
, textLabel labelText
, BgColor []
, color White
, Margin $ DVal 0.01
]
inputs `forM_` \(i, l) -> edge
i
name
( [Dir NoDir] ++ case l of
Nothing -> []
Just t -> [textLabel t]
)
-- edge inputs name [Dir NoDir]
outputs `forM_` \o -> edge name o []
dataTransformation :: n -> Text -> [n] -> [n] -> DotM n ()
dataTransformation name labelText inputs outputs = do
node
name
[ shape PlainText
, textLabel labelText
, BgColor []
, color White
, Margin $ DVal 0.01
]
inputs `forM_` \i -> edge i name [Dir NoDir]
outputs `forM_` \o -> edge name o []
addNote :: n -> [n] -> Text -> DotM n ()
addNote noteName refsName foo = do
node noteName [textLabel foo, shape PlainText, color White, fontColor Gray40]
refsName `forM_` \n -> edge n noteName [Dir NoDir, style dotted, PenWidth 1.0]
subContext :: n -> Text -> DotM n ()
subContext n t = node n [textLabel t, color Black, style solid, shape Ellipse]
main :: IO ()
main = do
void $ runGraphviz periphery Pdf "periphery.pdf"
void $ runGraphviz periphery Svg "periphery.svg"
void $ runGraphviz ppm Pdf "ppm.pdf"
void $ runGraphviz ppm Svg "ppm.svg"
void $ runGraphviz bridocgen Pdf "bridocgen.pdf"
void $ runGraphviz bridocgen Svg "bridocgen.svg"
where
periphery :: Data.GraphViz.Types.Generalised.DotGraph String
periphery = digraph (Str ("periphery")) $ do
-- graphAttrs [Layout Neato]
nodeAttrs [style filled, color LightGray, shape BoxShape]
edgeAttrs [color Gray40, PenWidth 2.0]
cluster (Num $ Int 0) $ do
graphAttrs [textLabel $ "input"]
graphAttrs [color LightGray, shape Tab]
nodeAttrs [style filled, color LightGray, shape BoxShape]
node "stdin/input file" []
node "program args" []
node "config file" []
cluster (Num $ Int 1) $ do
graphAttrs [textLabel $ "output"]
graphAttrs [color LightGray, shape Tab]
nodeAttrs [style filled, color LightGray, shape BoxShape]
node "output" [textLabel $ "stdout/output file"]
node "stderr" [textLabel $ "stderr"]
node "config" []
"program args" --> "config"
"config file" --> "config"
"default config" --> "config"
node "syntaxtree" []
node "annotations" []
node "annotations'" []
dataTransformation "annTrans"
"transform slightly"
["annotations"]
["annotations'"]
dataTransformation "parse"
"parse via ghc-exactprint"
["stdin/input file"]
["syntaxtree", "annotations"]
subContext "ppmcontext" $ Text.Lazy.unlines
[ "transformation in"
, "PPM monadic context:"
, "Reader: Config+Anns"
, "Writer: Output+Errors(+Debug output)"
]
"config" --> "ppmcontext"
"annotations'" --> "ppmcontext"
"syntaxtree" --> "ppmcontext"
"ppmcontext" --> "output"
"ppmcontext" --> "stderr"
ppm :: Data.GraphViz.Types.Generalised.DotGraph String
ppm = digraph (Str ("ppm")) $ do
-- graphAttrs [Layout Neato]
nodeAttrs [style filled, color LightGray, shape BoxShape]
edgeAttrs [color Gray40, PenWidth 2.0]
node
"config"
[ fontColor Gray40
, color Gray90
, textLabel $ Text.Lazy.unlines ["config", "(--dump-config)"]
]
node
"annotations"
[ fontColor Gray40
, color Gray90
, textLabel $ Text.Lazy.unlines ["annotations", "(--dump-annotations)"]
]
node "syntaxtree"
[textLabel $ Text.Lazy.unlines ["syntaxtree", "(--dump-ast-full)"]]
node
"modulechildren"
[textLabel
$ Text.Lazy.unlines
[ "top-level module"
, "children, e.g."
, "type sig, bind,"
, "data decl etc."
]
]
dataTransformation "syntaxSplit"
"split into"
["syntaxtree"]
["module header", "modulechildren"]
subContext "bridocgen" $ Text.Lazy.unlines
[ "translation into BriDoc tree"
, "in (nested) monadic context"
, "(additional) State: NodeAllocIndex"
]
addNote "bridocgen-note"
["bridocgen"]
"largest portion of\nbrittany src code"
edge "modulechildren" "bridocgen" [textLabel $ "for each child"]
edge "config" "bridocgen" [color Gray70, PenWidth 1.0]
edge "annotations" "bridocgen" [color Gray70, PenWidth 1.0]
node
"bridoc-alt"
[textLabel $ Text.Lazy.unlines
["BriDoc (with alternatives)", "(--dump-bridoc-raw)"]
]
"bridocgen" --> "bridoc-alt"
addNote "bridoc-alt-note"
["bridoc-alt"]
"exponential size,\nbut linear using\n(explicit) sharing"
node "spacing-info" [textLabel $ "Map from BriDoc node\nto spacing info"]
dataTransformation "getSpacing"
"getSpacing/getSpacings"
["bridoc-alt"]
["spacing-info"]
addNote "spacing-info-note" ["spacing-info"] $ Text.Lazy.unlines
[ "roughly: how much cols/rows"
, "each Bridoc subtree takes"
, "in bottom-up fashion"
]
node "bridoc-no-alt" [textLabel $ "BriDoc without Alts"]
dataTransformation "transformAlts"
"transformAlts"
["bridoc-alt", "spacing-info"]
["bridoc-no-alt"]
edge "config" "transformAlts" [color Gray70, PenWidth 1.0]
addNote "bridocnoaltnote" ["spacing-info", "bridoc-no-alt"] "linear size"
edge "bridocnoaltnote"
"bridoc-final"
[Dir NoDir, style dotted, PenWidth 1.0]
node
"bridoc-final"
[textLabel $ Text.Lazy.unlines
["transformed BriDoc", "(--dump-bridoc-final)"]
]
dataTransformation "otherTransforms"
"transformFloating\ntransformColumn\ntransformPar"
["bridoc-no-alt"]
["bridoc-final"]
addNote "otherTransforms-note"
["transformAlts", "otherTransforms"]
"most cpu/memory\nusage happens here"
"bridoc-final" --> "backend"
edge "annotations" "backend" [color Gray70, PenWidth 1.0]
edge "config" "backend" [color Gray70, PenWidth 1.0]
subContext "backend" $ Text.Lazy.unlines
[ "backend:"
, "BriDoc -> Text 'rendering'"
, "in (nested) monadic context"
, "(additional) State: LayoutState"
]
addNote "backendnote" ["backend"] $ Text.Lazy.unlines
["'LayoutState' really is", "just the state for", "the backend only."]
"backend" --> "output text fragments"
dataTransformationLabeled
"outputConcat"
"output concatenation"
[("output text fragments", Nothing), ("module header", Just $ "as-is")]
["output text"]
bridocgen :: Data.GraphViz.Types.Generalised.DotGraph String
bridocgen = digraph (Str ("bridocgen")) $ do
-- graphAttrs [Layout Neato]
nodeAttrs [style filled, color LightGray, shape BoxShape]
edgeAttrs [color Gray40, PenWidth 2.0]
node "type of node?" [shape DiamondShape, style solid, color Black]
edge "top-level module children" "type of node?" []
dataTransformationLabeled "layoutSig"
"layoutSig\n+recursion\n(layoutType etc.)"
[("type of node?", Just "type sig")]
["BriDoc (tree)"]
dataTransformationLabeled "layoutBind"
"layoutBind\n+recursion\n(layoutExpr etc.)"
[("type of node?", Just "equation")]
["BriDoc (tree)"]
dataTransformationLabeled "layoutByExact"
"layoutByExact"
[("type of node?", Just "not handled (yet)")]
["BriDoc (tree)"]
-- backend :: Data.GraphViz.Types.Generalised.DotGraph String
-- backend = digraph (Str ("ppm")) $ do

2
doc-svg-gen/Setup.hs Normal file
View File

@ -0,0 +1,2 @@
import Distribution.Simple
main = defaultMain

View File

@ -0,0 +1,29 @@
name: doc-svg-gen
version: 0.1.0.0
build-type: Simple
extra-source-files: ChangeLog.md
cabal-version: >=1.10
executable doc-svg-gen
buildable: True
main-is: Main.hs
-- other-modules:
-- other-extensions:
build-depends:
{ base >=4.9 && <4.10
, text
, graphviz >=2999.19.0.0
}
-- hs-source-dirs: src
default-language: Haskell2010
default-extensions: {
}
ghc-options: {
-Wall
-fprof-auto -fprof-cafs -fno-spec-constr
-j
-fno-warn-unused-imports
-fno-warn-orphans
-rtsopts
-with-rtsopts "-M2G"
}

1
doc-svg-gen/generated/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.pdf

View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: bridocgen Pages: 1 -->
<svg width="422pt" height="288pt"
viewBox="0.00 0.00 422.00 288.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 284)">
<title>bridocgen</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-284 418,-284 418,4 -4,4"/>
<!-- type of node? -->
<g id="node1" class="node">
<title>type of node?</title>
<polygon fill="none" stroke="#000000" points="204,-207 100.2703,-189 204,-171 307.7297,-189 204,-207"/>
<text text-anchor="middle" x="204" y="-185.3" font-family="Times,serif" font-size="14.00" fill="#000000">type of node?</text>
</g>
<!-- layoutSig -->
<g id="node3" class="node">
<title>layoutSig</title>
<polygon fill="#ffffff" stroke="transparent" points="124,-120 0,-120 0,-73 124,-73 124,-120"/>
<text text-anchor="middle" x="62" y="-107.8" font-family="Times,serif" font-size="14.00" fill="#000000">layoutSig</text>
<text text-anchor="middle" x="62" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">+recursion</text>
<text text-anchor="middle" x="62" y="-77.8" font-family="Times,serif" font-size="14.00" fill="#000000">(layoutType etc.)</text>
</g>
<!-- type of node?&#45;&gt;layoutSig -->
<g id="edge2" class="edge">
<title>type of node?&#45;&gt;layoutSig</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M178.9575,-175.1317C167.5433,-168.6399 153.9423,-160.6629 142,-153 125.9719,-142.7155 108.6559,-130.6155 94.2468,-120.257"/>
<text text-anchor="middle" x="171" y="-141.8" font-family="Times,serif" font-size="14.00" fill="#000000">type sig</text>
</g>
<!-- layoutBind -->
<g id="node5" class="node">
<title>layoutBind</title>
<polygon fill="#ffffff" stroke="transparent" points="265.5,-120 142.5,-120 142.5,-73 265.5,-73 265.5,-120"/>
<text text-anchor="middle" x="204" y="-107.8" font-family="Times,serif" font-size="14.00" fill="#000000">layoutBind</text>
<text text-anchor="middle" x="204" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">+recursion</text>
<text text-anchor="middle" x="204" y="-77.8" font-family="Times,serif" font-size="14.00" fill="#000000">(layoutExpr etc.)</text>
</g>
<!-- type of node?&#45;&gt;layoutBind -->
<g id="edge4" class="edge">
<title>type of node?&#45;&gt;layoutBind</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M204,-170.725C204,-156.1933 204,-135.7597 204,-120.0099"/>
<text text-anchor="middle" x="235.5" y="-141.8" font-family="Times,serif" font-size="14.00" fill="#000000">equation</text>
</g>
<!-- layoutByExact -->
<g id="node6" class="node">
<title>layoutByExact</title>
<polygon fill="#ffffff" stroke="transparent" points="390.5,-114.5 283.5,-114.5 283.5,-78.5 390.5,-78.5 390.5,-114.5"/>
<text text-anchor="middle" x="337" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">layoutByExact</text>
</g>
<!-- type of node?&#45;&gt;layoutByExact -->
<g id="edge6" class="edge">
<title>type of node?&#45;&gt;layoutByExact</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M231.8379,-175.7432C244.1924,-169.434 258.6893,-161.4317 271,-153 287.8,-141.4935 305.2353,-126.4106 317.9639,-114.7232"/>
<text text-anchor="middle" x="352.5" y="-141.8" font-family="Times,serif" font-size="14.00" fill="#000000">not handled (yet)</text>
</g>
<!-- top&#45;level module children -->
<g id="node2" class="node">
<title>top&#45;level module children</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="303.5,-280 104.5,-280 104.5,-244 303.5,-244 303.5,-280"/>
<text text-anchor="middle" x="204" y="-258.3" font-family="Times,serif" font-size="14.00" fill="#000000">top&#45;level module children</text>
</g>
<!-- top&#45;level module children&#45;&gt;type of node? -->
<g id="edge1" class="edge">
<title>top&#45;level module children&#45;&gt;type of node?</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M204,-243.9551C204,-235.8828 204,-226.1764 204,-217.1817"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="207.5001,-217.0903 204,-207.0904 200.5001,-217.0904 207.5001,-217.0903"/>
</g>
<!-- BriDoc (tree) -->
<g id="node4" class="node">
<title>BriDoc (tree)</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="259,-36 149,-36 149,0 259,0 259,-36"/>
<text text-anchor="middle" x="204" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">BriDoc (tree)</text>
</g>
<!-- layoutSig&#45;&gt;BriDoc (tree) -->
<g id="edge3" class="edge">
<title>layoutSig&#45;&gt;BriDoc (tree)</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M104.6047,-72.9474C122.8312,-62.8715 144.0469,-51.1431 162.1855,-41.1157"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="164.2999,-43.9462 171.3583,-36.0449 160.9132,-37.8199 164.2999,-43.9462"/>
</g>
<!-- layoutBind&#45;&gt;BriDoc (tree) -->
<g id="edge5" class="edge">
<title>layoutBind&#45;&gt;BriDoc (tree)</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M204,-72.9474C204,-64.5354 204,-54.9716 204,-46.2075"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="207.5001,-46.0449 204,-36.0449 200.5001,-46.0449 207.5001,-46.0449"/>
</g>
<!-- layoutByExact&#45;&gt;BriDoc (tree) -->
<g id="edge7" class="edge">
<title>layoutByExact&#45;&gt;BriDoc (tree)</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M306.4871,-78.4905C287.7815,-67.45 263.6397,-53.2009 243.4861,-41.3057"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="245.2224,-38.2664 234.8315,-36.1975 241.6643,-44.2947 245.2224,-38.2664"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1,180 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: periphery Pages: 1 -->
<svg width="518pt" height="594pt"
viewBox="0.00 0.00 518.00 594.17" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 590.1665)">
<title>periphery</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-590.1665 514,-590.1665 514,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_0</title>
<polygon fill="none" stroke="#d3d3d3" points="8,-503.1665 8,-578.1665 384,-578.1665 384,-503.1665 8,-503.1665"/>
<text text-anchor="middle" x="196" y="-562.9665" font-family="Times,serif" font-size="14.00" fill="#000000">input</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_1</title>
<polygon fill="none" stroke="#d3d3d3" points="162,-8 162,-83 399,-83 399,-8 162,-8"/>
<text text-anchor="middle" x="280.5" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">output</text>
</g>
<!-- stdin/input file -->
<g id="node1" class="node">
<title>stdin/input file</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="138,-547.1665 16,-547.1665 16,-511.1665 138,-511.1665 138,-547.1665"/>
<text text-anchor="middle" x="77" y="-525.4665" font-family="Times,serif" font-size="14.00" fill="#000000">stdin/input file</text>
</g>
<!-- parse -->
<g id="node12" class="node">
<title>parse</title>
<polygon fill="#ffffff" stroke="transparent" points="188.5,-475.1665 11.5,-475.1665 11.5,-439.1665 188.5,-439.1665 188.5,-475.1665"/>
<text text-anchor="middle" x="100" y="-453.4665" font-family="Times,serif" font-size="14.00" fill="#000000">parse via ghc&#45;exactprint</text>
</g>
<!-- stdin/input file&#45;&gt;parse -->
<g id="edge6" class="edge">
<title>stdin/input file&#45;&gt;parse</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M82.8039,-510.9979C86.2639,-500.1665 90.6442,-486.4541 94.118,-475.5798"/>
</g>
<!-- program args -->
<g id="node2" class="node">
<title>program args</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="270,-547.1665 156,-547.1665 156,-511.1665 270,-511.1665 270,-547.1665"/>
<text text-anchor="middle" x="213" y="-525.4665" font-family="Times,serif" font-size="14.00" fill="#000000">program args</text>
</g>
<!-- config -->
<g id="node6" class="node">
<title>config</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="356.5,-475.1665 295.5,-475.1665 295.5,-439.1665 356.5,-439.1665 356.5,-475.1665"/>
<text text-anchor="middle" x="326" y="-453.4665" font-family="Times,serif" font-size="14.00" fill="#000000">config</text>
</g>
<!-- program args&#45;&gt;config -->
<g id="edge1" class="edge">
<title>program args&#45;&gt;config</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M241.5147,-510.9979C255.8342,-501.8739 273.3624,-490.7056 288.7338,-480.9114"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="290.9417,-483.6547 297.4945,-475.3293 287.1801,-477.7512 290.9417,-483.6547"/>
</g>
<!-- config file -->
<g id="node3" class="node">
<title>config file</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="376,-547.1665 288,-547.1665 288,-511.1665 376,-511.1665 376,-547.1665"/>
<text text-anchor="middle" x="332" y="-525.4665" font-family="Times,serif" font-size="14.00" fill="#000000">config file</text>
</g>
<!-- config file&#45;&gt;config -->
<g id="edge2" class="edge">
<title>config file&#45;&gt;config</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M330.4859,-510.9979C329.8442,-503.2975 329.0812,-494.1409 328.3681,-485.5832"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="331.8529,-485.2546 327.5344,-475.5798 324.8771,-485.8359 331.8529,-485.2546"/>
</g>
<!-- output -->
<g id="node4" class="node">
<title>output</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="390.5,-52 249.5,-52 249.5,-16 390.5,-16 390.5,-52"/>
<text text-anchor="middle" x="320" y="-30.3" font-family="Times,serif" font-size="14.00" fill="#000000">stdout/output file</text>
</g>
<!-- stderr -->
<g id="node5" class="node">
<title>stderr</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="231.5,-52 170.5,-52 170.5,-16 231.5,-16 231.5,-52"/>
<text text-anchor="middle" x="201" y="-30.3" font-family="Times,serif" font-size="14.00" fill="#000000">stderr</text>
</g>
<!-- ppmcontext -->
<g id="node13" class="node">
<title>ppmcontext</title>
<ellipse fill="none" stroke="#000000" cx="215" cy="-139.0833" rx="214.007" ry="48.1667"/>
<text text-anchor="middle" x="215" y="-157.8833" font-family="Times,serif" font-size="14.00" fill="#000000">transformation in</text>
<text text-anchor="middle" x="215" y="-142.8833" font-family="Times,serif" font-size="14.00" fill="#000000">PPM monadic context:</text>
<text text-anchor="middle" x="215" y="-127.8833" font-family="Times,serif" font-size="14.00" fill="#000000">Reader: Config+Anns</text>
<text text-anchor="middle" x="215" y="-112.8833" font-family="Times,serif" font-size="14.00" fill="#000000">Writer: Output+Errors(+Debug output)</text>
</g>
<!-- config&#45;&gt;ppmcontext -->
<g id="edge9" class="edge">
<title>config&#45;&gt;ppmcontext</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M324.6965,-439.0662C321.2506,-398.6923 309.7228,-298.8717 276,-223.1665 271.7735,-213.6784 266.3613,-204.2038 260.5108,-195.2166"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="263.2947,-193.0855 254.7916,-186.765 257.4974,-197.0086 263.2947,-193.0855"/>
</g>
<!-- default config -->
<g id="node7" class="node">
<title>default config</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="510,-547.1665 394,-547.1665 394,-511.1665 510,-511.1665 510,-547.1665"/>
<text text-anchor="middle" x="452" y="-525.4665" font-family="Times,serif" font-size="14.00" fill="#000000">default config</text>
</g>
<!-- default config&#45;&gt;config -->
<g id="edge3" class="edge">
<title>default config&#45;&gt;config</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M420.2049,-510.9979C403.6912,-501.5615 383.3505,-489.9383 365.8014,-479.9102"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="367.3328,-476.7541 356.9138,-474.8316 363.8598,-482.8319 367.3328,-476.7541"/>
</g>
<!-- syntaxtree -->
<g id="node8" class="node">
<title>syntaxtree</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="146.5,-403.1665 53.5,-403.1665 53.5,-367.1665 146.5,-367.1665 146.5,-403.1665"/>
<text text-anchor="middle" x="100" y="-381.4665" font-family="Times,serif" font-size="14.00" fill="#000000">syntaxtree</text>
</g>
<!-- syntaxtree&#45;&gt;ppmcontext -->
<g id="edge11" class="edge">
<title>syntaxtree&#45;&gt;ppmcontext</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M104.1318,-366.9507C111.5273,-336.188 128.6613,-272.4758 154,-223.1665 158.8594,-213.71 164.7157,-204.1499 170.8519,-195.0353"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="173.7342,-197.0208 176.5454,-186.8057 167.9776,-193.0382 173.7342,-197.0208"/>
</g>
<!-- annotations -->
<g id="node9" class="node">
<title>annotations</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="265.5,-403.1665 164.5,-403.1665 164.5,-367.1665 265.5,-367.1665 265.5,-403.1665"/>
<text text-anchor="middle" x="215" y="-381.4665" font-family="Times,serif" font-size="14.00" fill="#000000">annotations</text>
</g>
<!-- annTrans -->
<g id="node11" class="node">
<title>annTrans</title>
<polygon fill="#ffffff" stroke="transparent" points="281,-331.1665 149,-331.1665 149,-295.1665 281,-295.1665 281,-331.1665"/>
<text text-anchor="middle" x="215" y="-309.4665" font-family="Times,serif" font-size="14.00" fill="#000000">transform slightly</text>
</g>
<!-- annotations&#45;&gt;annTrans -->
<g id="edge4" class="edge">
<title>annotations&#45;&gt;annTrans</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M215,-366.9979C215,-356.1665 215,-342.4541 215,-331.5798"/>
</g>
<!-- annotations&#39; -->
<g id="node10" class="node">
<title>annotations&#39;</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="267,-259.1665 163,-259.1665 163,-223.1665 267,-223.1665 267,-259.1665"/>
<text text-anchor="middle" x="215" y="-237.4665" font-family="Times,serif" font-size="14.00" fill="#000000">annotations&#39;</text>
</g>
<!-- annotations&#39;&#45;&gt;ppmcontext -->
<g id="edge10" class="edge">
<title>annotations&#39;&#45;&gt;ppmcontext</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M215,-222.9161C215,-215.5879 215,-206.6959 215,-197.4771"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="218.5001,-197.404 215,-187.404 211.5001,-197.4041 218.5001,-197.404"/>
</g>
<!-- annTrans&#45;&gt;annotations&#39; -->
<g id="edge5" class="edge">
<title>annTrans&#45;&gt;annotations&#39;</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M215,-294.9979C215,-287.2975 215,-278.1409 215,-269.5832"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="218.5001,-269.5798 215,-259.5798 211.5001,-269.5798 218.5001,-269.5798"/>
</g>
<!-- parse&#45;&gt;syntaxtree -->
<g id="edge7" class="edge">
<title>parse&#45;&gt;syntaxtree</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M100,-438.9979C100,-431.2975 100,-422.1409 100,-413.5832"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="103.5001,-413.5798 100,-403.5798 96.5001,-413.5798 103.5001,-413.5798"/>
</g>
<!-- parse&#45;&gt;annotations -->
<g id="edge8" class="edge">
<title>parse&#45;&gt;annotations</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M129.0194,-438.9979C143.7286,-429.7886 161.7644,-418.4966 177.5122,-408.6371"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="179.3714,-411.6026 185.9899,-403.3293 175.6567,-405.6695 179.3714,-411.6026"/>
</g>
<!-- ppmcontext&#45;&gt;output -->
<g id="edge12" class="edge">
<title>ppmcontext&#45;&gt;output</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M261.972,-92.074C273.2851,-80.7519 284.9444,-69.0834 294.8172,-59.2028"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="297.391,-61.5786 301.9834,-52.0308 292.4393,-56.6308 297.391,-61.5786"/>
</g>
<!-- ppmcontext&#45;&gt;stderr -->
<g id="edge13" class="edge">
<title>ppmcontext&#45;&gt;stderr</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M208.5736,-90.8474C207.2654,-81.0277 205.9302,-71.0061 204.7526,-62.1669"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="208.1967,-61.5146 203.4067,-52.0645 201.258,-62.4391 208.1967,-61.5146"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,353 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: ppm Pages: 1 -->
<svg width="640pt" height="1316pt"
viewBox="0.00 0.00 640.00 1316.12" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1312.1198)">
<title>ppm</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-1312.1198 636,-1312.1198 636,4 -4,4"/>
<!-- config -->
<g id="node1" class="node">
<title>config</title>
<polygon fill="#e5e5e5" stroke="#e5e5e5" points="125,-1145.1198 0,-1145.1198 0,-1107.1198 125,-1107.1198 125,-1145.1198"/>
<text text-anchor="middle" x="62.5" y="-1129.9198" font-family="Times,serif" font-size="14.00" fill="#666666">config</text>
<text text-anchor="middle" x="62.5" y="-1114.9198" font-family="Times,serif" font-size="14.00" fill="#666666">(&#45;&#45;dump&#45;config)</text>
</g>
<!-- bridocgen -->
<g id="node7" class="node">
<title>bridocgen</title>
<ellipse fill="none" stroke="#000000" cx="278.5" cy="-982.6432" rx="187.2667" ry="37.4533"/>
<text text-anchor="middle" x="278.5" y="-993.9432" font-family="Times,serif" font-size="14.00" fill="#000000">translation into BriDoc tree</text>
<text text-anchor="middle" x="278.5" y="-978.9432" font-family="Times,serif" font-size="14.00" fill="#000000">in (nested) monadic context</text>
<text text-anchor="middle" x="278.5" y="-963.9432" font-family="Times,serif" font-size="14.00" fill="#000000">(additional) State: NodeAllocIndex</text>
</g>
<!-- config&#45;&gt;bridocgen -->
<g id="edge6" class="edge">
<title>config&#45;&gt;bridocgen</title>
<path fill="none" stroke="#b3b3b3" d="M91.1831,-1107.0672C122.8548,-1086.0295 174.8089,-1051.5194 215.977,-1024.1737"/>
<polygon fill="#b3b3b3" stroke="#b3b3b3" points="217.9286,-1027.0792 224.3218,-1018.6307 214.0555,-1021.2483 217.9286,-1027.0792"/>
</g>
<!-- transformAlts -->
<g id="node15" class="node">
<title>transformAlts</title>
<polygon fill="#ffffff" stroke="transparent" points="183.5,-659.6665 81.5,-659.6665 81.5,-623.6665 183.5,-623.6665 183.5,-659.6665"/>
<text text-anchor="middle" x="132.5" y="-637.9665" font-family="Times,serif" font-size="14.00" fill="#000000">transformAlts</text>
</g>
<!-- config&#45;&gt;transformAlts -->
<g id="edge16" class="edge">
<title>config&#45;&gt;transformAlts</title>
<path fill="none" stroke="#b3b3b3" d="M62.5,-1107.0889C62.5,-1079.612 62.5,-1027.2305 62.5,-982.6432 62.5,-982.6432 62.5,-982.6432 62.5,-724.1665 62.5,-700.7101 79.1559,-680.5072 96.2185,-665.965"/>
<polygon fill="#b3b3b3" stroke="#b3b3b3" points="98.4248,-668.6822 104.0283,-659.6905 94.0405,-663.2252 98.4248,-668.6822"/>
</g>
<!-- backend -->
<g id="node20" class="node">
<title>backend</title>
<ellipse fill="none" stroke="#000000" cx="337.5" cy="-284.0833" rx="168.0831" ry="48.1667"/>
<text text-anchor="middle" x="337.5" y="-302.8833" font-family="Times,serif" font-size="14.00" fill="#000000">backend:</text>
<text text-anchor="middle" x="337.5" y="-287.8833" font-family="Times,serif" font-size="14.00" fill="#000000">BriDoc &#45;&gt; Text &#39;rendering&#39;</text>
<text text-anchor="middle" x="337.5" y="-272.8833" font-family="Times,serif" font-size="14.00" fill="#000000">in (nested) monadic context</text>
<text text-anchor="middle" x="337.5" y="-257.8833" font-family="Times,serif" font-size="14.00" fill="#000000">(additional) State: LayoutState</text>
</g>
<!-- config&#45;&gt;backend -->
<g id="edge26" class="edge">
<title>config&#45;&gt;backend</title>
<path fill="none" stroke="#b3b3b3" d="M54.0666,-1107.0518C42.8715,-1079.9585 24.5,-1028.5102 24.5,-982.6432 24.5,-982.6432 24.5,-982.6432 24.5,-388.1665 24.5,-351.7839 101.6115,-325.876 179.286,-309.008"/>
<polygon fill="#b3b3b3" stroke="#b3b3b3" points="180.1942,-312.3933 189.2495,-306.8931 178.7407,-305.5458 180.1942,-312.3933"/>
</g>
<!-- annotations -->
<g id="node2" class="node">
<title>annotations</title>
<polygon fill="#e5e5e5" stroke="#e5e5e5" points="538,-1145.1198 373,-1145.1198 373,-1107.1198 538,-1107.1198 538,-1145.1198"/>
<text text-anchor="middle" x="455.5" y="-1129.9198" font-family="Times,serif" font-size="14.00" fill="#666666">annotations</text>
<text text-anchor="middle" x="455.5" y="-1114.9198" font-family="Times,serif" font-size="14.00" fill="#666666">(&#45;&#45;dump&#45;annotations)</text>
</g>
<!-- annotations&#45;&gt;bridocgen -->
<g id="edge7" class="edge">
<title>annotations&#45;&gt;bridocgen</title>
<path fill="none" stroke="#b3b3b3" d="M443.0343,-1107.1032C429.7545,-1087.9172 407.2664,-1058.3187 382.5,-1038.1198 375.8321,-1032.6816 368.5489,-1027.5333 361.0325,-1022.7262"/>
<polygon fill="#b3b3b3" stroke="#b3b3b3" points="362.4754,-1019.5045 352.1247,-1017.2431 358.806,-1025.4657 362.4754,-1019.5045"/>
</g>
<!-- annotations&#45;&gt;backend -->
<g id="edge25" class="edge">
<title>annotations&#45;&gt;backend</title>
<path fill="none" stroke="#b3b3b3" d="M463.9334,-1107.0518C475.1285,-1079.9585 493.5,-1028.5102 493.5,-982.6432 493.5,-982.6432 493.5,-982.6432 493.5,-388.1665 493.5,-361.6062 477.6587,-341.4042 456.0721,-326.2053"/>
<polygon fill="#b3b3b3" stroke="#b3b3b3" points="457.823,-323.1683 447.5386,-320.6223 453.9906,-329.026 457.823,-323.1683"/>
</g>
<!-- syntaxtree -->
<g id="node3" class="node">
<title>syntaxtree</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="491,-1308.1198 360,-1308.1198 360,-1270.1198 491,-1270.1198 491,-1308.1198"/>
<text text-anchor="middle" x="425.5" y="-1292.9198" font-family="Times,serif" font-size="14.00" fill="#000000">syntaxtree</text>
<text text-anchor="middle" x="425.5" y="-1277.9198" font-family="Times,serif" font-size="14.00" fill="#000000">(&#45;&#45;dump&#45;ast&#45;full)</text>
</g>
<!-- syntaxSplit -->
<g id="node5" class="node">
<title>syntaxSplit</title>
<polygon fill="#ffffff" stroke="transparent" points="458.5,-1233.1198 392.5,-1233.1198 392.5,-1197.1198 458.5,-1197.1198 458.5,-1233.1198"/>
<text text-anchor="middle" x="425.5" y="-1211.4198" font-family="Times,serif" font-size="14.00" fill="#000000">split into</text>
</g>
<!-- syntaxtree&#45;&gt;syntaxSplit -->
<g id="edge1" class="edge">
<title>syntaxtree&#45;&gt;syntaxSplit</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M425.5,-1270.063C425.5,-1258.7576 425.5,-1244.5032 425.5,-1233.3467"/>
</g>
<!-- modulechildren -->
<g id="node4" class="node">
<title>modulechildren</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="349,-1160.1198 214,-1160.1198 214,-1092.1198 349,-1092.1198 349,-1160.1198"/>
<text text-anchor="middle" x="281.5" y="-1144.9198" font-family="Times,serif" font-size="14.00" fill="#000000">top&#45;level module</text>
<text text-anchor="middle" x="281.5" y="-1129.9198" font-family="Times,serif" font-size="14.00" fill="#000000">children, e.g.</text>
<text text-anchor="middle" x="281.5" y="-1114.9198" font-family="Times,serif" font-size="14.00" fill="#000000">type sig, bind,</text>
<text text-anchor="middle" x="281.5" y="-1099.9198" font-family="Times,serif" font-size="14.00" fill="#000000">data decl etc.</text>
</g>
<!-- modulechildren&#45;&gt;bridocgen -->
<g id="edge5" class="edge">
<title>modulechildren&#45;&gt;bridocgen</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M280.789,-1092.1179C280.4039,-1073.7 279.9218,-1050.643 279.4995,-1030.4451"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="282.9933,-1030.1079 279.2849,-1020.1833 275.9948,-1030.2543 282.9933,-1030.1079"/>
<text text-anchor="middle" x="329" y="-1052.4198" font-family="Times,serif" font-size="14.00" fill="#000000">for each child</text>
</g>
<!-- syntaxSplit&#45;&gt;modulechildren -->
<g id="edge3" class="edge">
<title>syntaxSplit&#45;&gt;modulechildren</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M396.3595,-1197.1094C381.5988,-1187.9864 363.0595,-1176.5282 345.2092,-1165.4957"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="346.8678,-1162.4063 336.5213,-1160.126 343.1876,-1168.3608 346.8678,-1162.4063"/>
</g>
<!-- module header -->
<g id="node6" class="node">
<title>module header</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="632,-1074.1198 509,-1074.1198 509,-1038.1198 632,-1038.1198 632,-1074.1198"/>
<text text-anchor="middle" x="570.5" y="-1052.4198" font-family="Times,serif" font-size="14.00" fill="#000000">module header</text>
</g>
<!-- syntaxSplit&#45;&gt;module header -->
<g id="edge2" class="edge">
<title>syntaxSplit&#45;&gt;module header</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M458.517,-1208.8324C486.3934,-1201.7762 525.2269,-1187.5251 547.5,-1160.1198 564.8174,-1138.8121 569.7837,-1107.2344 570.9007,-1084.4686"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="574.4015,-1084.4828 571.1755,-1074.3911 567.4041,-1084.292 574.4015,-1084.4828"/>
</g>
<!-- outputConcat -->
<g id="node23" class="node">
<title>outputConcat</title>
<polygon fill="#ffffff" stroke="transparent" points="590.5,-109 434.5,-109 434.5,-73 590.5,-73 590.5,-109"/>
<text text-anchor="middle" x="512.5" y="-87.3" font-family="Times,serif" font-size="14.00" fill="#000000">output concatenation</text>
</g>
<!-- module header&#45;&gt;outputConcat -->
<g id="edge30" class="edge">
<title>module header&#45;&gt;outputConcat</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M570.5,-1038.1096C570.5,-1013.1024 570.5,-966.4464 570.5,-926.6665 570.5,-926.6665 570.5,-926.6665 570.5,-172.5 570.5,-147.1449 551.6351,-124.202 535.4231,-109.1669"/>
<text text-anchor="middle" x="587" y="-585.9665" font-family="Times,serif" font-size="14.00" fill="#000000">as&#45;is</text>
</g>
<!-- bridocgen&#45;note -->
<g id="node8" class="node">
<title>bridocgen&#45;note</title>
<polygon fill="#ffffff" stroke="transparent" points="232,-908.1665 91,-908.1665 91,-870.1665 232,-870.1665 232,-908.1665"/>
<text text-anchor="middle" x="161.5" y="-892.9665" font-family="Times,serif" font-size="14.00" fill="#666666">largest portion of</text>
<text text-anchor="middle" x="161.5" y="-877.9665" font-family="Times,serif" font-size="14.00" fill="#666666">brittany src code</text>
</g>
<!-- bridocgen&#45;&gt;bridocgen&#45;note -->
<g id="edge4" class="edge">
<title>bridocgen&#45;&gt;bridocgen&#45;note</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M232.9297,-946.235C216.7606,-933.3167 199.2042,-919.2901 185.5431,-908.3756"/>
</g>
<!-- bridoc&#45;alt -->
<g id="node9" class="node">
<title>bridoc&#45;alt</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="453,-908.1665 250,-908.1665 250,-870.1665 453,-870.1665 453,-908.1665"/>
<text text-anchor="middle" x="351.5" y="-892.9665" font-family="Times,serif" font-size="14.00" fill="#000000">BriDoc (with alternatives)</text>
<text text-anchor="middle" x="351.5" y="-877.9665" font-family="Times,serif" font-size="14.00" fill="#000000">(&#45;&#45;dump&#45;bridoc&#45;raw)</text>
</g>
<!-- bridocgen&#45;&gt;bridoc&#45;alt -->
<g id="edge8" class="edge">
<title>bridocgen&#45;&gt;bridoc&#45;alt</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M307.5613,-945.4301C315.1717,-935.685 323.2327,-925.3629 330.3437,-916.2572"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="333.1706,-918.3239 336.5671,-908.2882 327.6536,-914.0154 333.1706,-918.3239"/>
</g>
<!-- bridoc&#45;alt&#45;note -->
<g id="node10" class="node">
<title>bridoc&#45;alt&#45;note</title>
<polygon fill="#ffffff" stroke="transparent" points="230,-833.1665 91,-833.1665 91,-780.1665 230,-780.1665 230,-833.1665"/>
<text text-anchor="middle" x="160.5" y="-817.9665" font-family="Times,serif" font-size="14.00" fill="#666666">exponential size,</text>
<text text-anchor="middle" x="160.5" y="-802.9665" font-family="Times,serif" font-size="14.00" fill="#666666">but linear using</text>
<text text-anchor="middle" x="160.5" y="-787.9665" font-family="Times,serif" font-size="14.00" fill="#666666">(explicit) sharing</text>
</g>
<!-- bridoc&#45;alt&#45;&gt;bridoc&#45;alt&#45;note -->
<g id="edge9" class="edge">
<title>bridoc&#45;alt&#45;&gt;bridoc&#45;alt&#45;note</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M290.8464,-870.1229C275.5312,-864.79 259.2516,-858.6602 244.5,-852.1665 231.9009,-846.6204 218.6416,-839.8877 206.4746,-833.3209"/>
</g>
<!-- getSpacing -->
<g id="node12" class="node">
<title>getSpacing</title>
<polygon fill="#ffffff" stroke="transparent" points="463,-824.6665 286,-824.6665 286,-788.6665 463,-788.6665 463,-824.6665"/>
<text text-anchor="middle" x="374.5" y="-802.9665" font-family="Times,serif" font-size="14.00" fill="#000000">getSpacing/getSpacings</text>
</g>
<!-- bridoc&#45;alt&#45;&gt;getSpacing -->
<g id="edge10" class="edge">
<title>bridoc&#45;alt&#45;&gt;getSpacing</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M356.8345,-870.032C360.6298,-856.4183 365.6972,-838.2419 369.4312,-824.8481"/>
</g>
<!-- bridoc&#45;alt&#45;&gt;transformAlts -->
<g id="edge13" class="edge">
<title>bridoc&#45;alt&#45;&gt;transformAlts</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M322.1008,-870.0152C307.8118,-859.963 290.8811,-846.8971 277.5,-833.1665 257.2708,-812.4089 256.8073,-803.4164 239.5,-780.1665 207.023,-736.5382 167.65,-686.2078 146.9029,-659.8779"/>
</g>
<!-- spacing&#45;info -->
<g id="node11" class="node">
<title>spacing&#45;info</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="465,-743.1665 286,-743.1665 286,-705.1665 465,-705.1665 465,-743.1665"/>
<text text-anchor="middle" x="375.5" y="-727.9665" font-family="Times,serif" font-size="14.00" fill="#000000">Map from BriDoc node</text>
<text text-anchor="middle" x="375.5" y="-712.9665" font-family="Times,serif" font-size="14.00" fill="#000000">to spacing info</text>
</g>
<!-- spacing&#45;info&#45;note -->
<g id="node13" class="node">
<title>spacing&#45;info&#45;note</title>
<polygon fill="#ffffff" stroke="transparent" points="427.5,-668.1665 201.5,-668.1665 201.5,-615.1665 427.5,-615.1665 427.5,-668.1665"/>
<text text-anchor="middle" x="314.5" y="-652.9665" font-family="Times,serif" font-size="14.00" fill="#666666">roughly: how much cols/rows</text>
<text text-anchor="middle" x="314.5" y="-637.9665" font-family="Times,serif" font-size="14.00" fill="#666666">each Bridoc subtree takes</text>
<text text-anchor="middle" x="314.5" y="-622.9665" font-family="Times,serif" font-size="14.00" fill="#666666">in bottom&#45;up fashion</text>
</g>
<!-- spacing&#45;info&#45;&gt;spacing&#45;info&#45;note -->
<g id="edge12" class="edge">
<title>spacing&#45;info&#45;&gt;spacing&#45;info&#45;note</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M361.3521,-705.032C353.2571,-694.0839 342.9804,-680.185 334.1155,-668.1957"/>
</g>
<!-- spacing&#45;info&#45;&gt;transformAlts -->
<g id="edge14" class="edge">
<title>spacing&#45;info&#45;&gt;transformAlts</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M327.2475,-705.0971C309.8379,-698.6006 289.9359,-691.6112 271.5,-686.1665 236.9637,-675.9668 226.6833,-679.4931 192.5,-668.1665 185.2577,-665.7668 177.6964,-662.808 170.4793,-659.7472"/>
</g>
<!-- bridocnoaltnote -->
<g id="node16" class="node">
<title>bridocnoaltnote</title>
<polygon fill="#ffffff" stroke="transparent" points="405.5,-485.6665 315.5,-485.6665 315.5,-449.6665 405.5,-449.6665 405.5,-485.6665"/>
<text text-anchor="middle" x="360.5" y="-463.9665" font-family="Times,serif" font-size="14.00" fill="#666666">linear size</text>
</g>
<!-- spacing&#45;info&#45;&gt;bridocnoaltnote -->
<g id="edge17" class="edge">
<title>spacing&#45;info&#45;&gt;bridocnoaltnote</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M405.54,-704.9361C417.5365,-695.4686 430.022,-682.9073 436.5,-668.1665 445.977,-646.6015 442.0509,-638.0587 436.5,-615.1665 424.3488,-565.0541 392.0334,-512.907 373.6929,-486.0709"/>
</g>
<!-- getSpacing&#45;&gt;spacing&#45;info -->
<g id="edge11" class="edge">
<title>getSpacing&#45;&gt;spacing&#45;info</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M374.7219,-788.3571C374.8462,-778.1078 375.004,-765.088 375.145,-753.4568"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="378.6467,-753.3265 375.2683,-743.2848 371.6472,-753.2416 378.6467,-753.3265"/>
</g>
<!-- bridoc&#45;no&#45;alt -->
<g id="node14" class="node">
<title>bridoc&#45;no&#45;alt</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="318.5,-564.1665 160.5,-564.1665 160.5,-528.1665 318.5,-528.1665 318.5,-564.1665"/>
<text text-anchor="middle" x="239.5" y="-542.4665" font-family="Times,serif" font-size="14.00" fill="#000000">BriDoc without Alts</text>
</g>
<!-- bridoc&#45;no&#45;alt&#45;&gt;bridocnoaltnote -->
<g id="edge18" class="edge">
<title>bridoc&#45;no&#45;alt&#45;&gt;bridocnoaltnote</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M267.2598,-528.157C286.796,-515.4827 312.8501,-498.5799 332.4503,-485.864"/>
</g>
<!-- otherTransforms -->
<g id="node18" class="node">
<title>otherTransforms</title>
<polygon fill="#ffffff" stroke="transparent" points="297,-491.1665 164,-491.1665 164,-444.1665 297,-444.1665 297,-491.1665"/>
<text text-anchor="middle" x="230.5" y="-478.9665" font-family="Times,serif" font-size="14.00" fill="#000000">transformFloating</text>
<text text-anchor="middle" x="230.5" y="-463.9665" font-family="Times,serif" font-size="14.00" fill="#000000">transformColumn</text>
<text text-anchor="middle" x="230.5" y="-448.9665" font-family="Times,serif" font-size="14.00" fill="#000000">transformPar</text>
</g>
<!-- bridoc&#45;no&#45;alt&#45;&gt;otherTransforms -->
<g id="edge20" class="edge">
<title>bridoc&#45;no&#45;alt&#45;&gt;otherTransforms</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M237.4126,-527.9597C236.1663,-517.0896 234.5696,-503.1622 233.2247,-491.4321"/>
</g>
<!-- transformAlts&#45;&gt;bridoc&#45;no&#45;alt -->
<g id="edge15" class="edge">
<title>transformAlts&#45;&gt;bridoc&#45;no&#45;alt</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M152.8777,-623.4789C169.5372,-608.61 193.2609,-587.436 211.67,-571.0054"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="214.0681,-573.5564 219.1981,-564.2864 209.4069,-568.334 214.0681,-573.5564"/>
</g>
<!-- otherTransforms&#45;note -->
<g id="node19" class="node">
<title>otherTransforms&#45;note</title>
<polygon fill="#ffffff" stroke="transparent" points="212.5,-407.1665 52.5,-407.1665 52.5,-369.1665 212.5,-369.1665 212.5,-407.1665"/>
<text text-anchor="middle" x="132.5" y="-391.9665" font-family="Times,serif" font-size="14.00" fill="#666666">most cpu/memory</text>
<text text-anchor="middle" x="132.5" y="-376.9665" font-family="Times,serif" font-size="14.00" fill="#666666">usage happens here</text>
</g>
<!-- transformAlts&#45;&gt;otherTransforms&#45;note -->
<g id="edge22" class="edge">
<title>transformAlts&#45;&gt;otherTransforms&#45;note</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M132.5,-623.4354C132.5,-577.0033 132.5,-454.6225 132.5,-407.2624"/>
</g>
<!-- bridoc&#45;final -->
<g id="node17" class="node">
<title>bridoc&#45;final</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="419,-407.1665 256,-407.1665 256,-369.1665 419,-369.1665 419,-407.1665"/>
<text text-anchor="middle" x="337.5" y="-391.9665" font-family="Times,serif" font-size="14.00" fill="#000000">transformed BriDoc</text>
<text text-anchor="middle" x="337.5" y="-376.9665" font-family="Times,serif" font-size="14.00" fill="#000000">(&#45;&#45;dump&#45;bridoc&#45;final)</text>
</g>
<!-- bridocnoaltnote&#45;&gt;bridoc&#45;final -->
<g id="edge19" class="edge">
<title>bridocnoaltnote&#45;&gt;bridoc&#45;final</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M355.2809,-449.6267C351.6229,-436.9826 346.7417,-420.1108 343.0191,-407.2435"/>
</g>
<!-- bridoc&#45;final&#45;&gt;backend -->
<g id="edge24" class="edge">
<title>bridoc&#45;final&#45;&gt;backend</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M337.5,-369.076C337.5,-361.41 337.5,-352.1234 337.5,-342.5422"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="341.0001,-342.5064 337.5,-332.5064 334.0001,-342.5065 341.0001,-342.5064"/>
</g>
<!-- otherTransforms&#45;&gt;bridoc&#45;final -->
<g id="edge21" class="edge">
<title>otherTransforms&#45;&gt;bridoc&#45;final</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M262.3138,-444.0291C275.2504,-434.4174 290.2234,-423.2926 303.386,-413.5129"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="305.7951,-416.0833 311.7347,-407.3099 301.6203,-410.4645 305.7951,-416.0833"/>
</g>
<!-- otherTransforms&#45;&gt;otherTransforms&#45;note -->
<g id="edge23" class="edge">
<title>otherTransforms&#45;&gt;otherTransforms&#45;note</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M201.3621,-444.0291C186.9182,-432.3119 169.7027,-418.3463 156.0982,-407.3099"/>
</g>
<!-- backendnote -->
<g id="node21" class="node">
<title>backendnote</title>
<polygon fill="#ffffff" stroke="transparent" points="349,-199 176,-199 176,-146 349,-146 349,-199"/>
<text text-anchor="middle" x="262.5" y="-183.8" font-family="Times,serif" font-size="14.00" fill="#666666">&#39;LayoutState&#39; really is</text>
<text text-anchor="middle" x="262.5" y="-168.8" font-family="Times,serif" font-size="14.00" fill="#666666">just the state for</text>
<text text-anchor="middle" x="262.5" y="-153.8" font-family="Times,serif" font-size="14.00" fill="#666666">the backend only.</text>
</g>
<!-- backend&#45;&gt;backendnote -->
<g id="edge27" class="edge">
<title>backend&#45;&gt;backendnote</title>
<path fill="none" stroke="#666666" stroke-dasharray="1,5" d="M305.6932,-236.7619C297.0696,-223.9318 288.0347,-210.4899 280.4703,-199.2358"/>
</g>
<!-- output text fragments -->
<g id="node22" class="node">
<title>output text fragments</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="542,-190.5 367,-190.5 367,-154.5 542,-154.5 542,-190.5"/>
<text text-anchor="middle" x="454.5" y="-168.8" font-family="Times,serif" font-size="14.00" fill="#000000">output text fragments</text>
</g>
<!-- backend&#45;&gt;output text fragments -->
<g id="edge28" class="edge">
<title>backend&#45;&gt;output text fragments</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M386.1021,-237.7313C400.4522,-224.0455 415.6208,-209.5792 428.0173,-197.7566"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="430.5245,-200.202 435.3456,-190.7676 425.6934,-195.1364 430.5245,-200.202"/>
</g>
<!-- output text fragments&#45;&gt;outputConcat -->
<g id="edge29" class="edge">
<title>output text fragments&#45;&gt;outputConcat</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M467.3721,-154.4125C476.9837,-140.9066 490.061,-122.5307 499.6639,-109.0369"/>
</g>
<!-- output text -->
<g id="node24" class="node">
<title>output text</title>
<polygon fill="#d3d3d3" stroke="#d3d3d3" points="561,-36 464,-36 464,0 561,0 561,-36"/>
<text text-anchor="middle" x="512.5" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">output text</text>
</g>
<!-- outputConcat&#45;&gt;output text -->
<g id="edge31" class="edge">
<title>outputConcat&#45;&gt;output text</title>
<path fill="none" stroke="#666666" stroke-width="2" d="M512.5,-72.9551C512.5,-64.8828 512.5,-55.1764 512.5,-46.1817"/>
<polygon fill="#666666" stroke="#666666" stroke-width="2" points="516.0001,-46.0903 512.5,-36.0904 509.0001,-46.0904 516.0001,-46.0903"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB