From a9f2ed7a549b79459b31237b6cb6dc46ee8e76a6 Mon Sep 17 00:00:00 2001 From: sverweij Date: Wed, 6 Jan 2021 20:14:10 +0100 Subject: [PATCH 1/3] feature(render): adds postscript output formats (cli only) --- README.md | 10 ++++++---- src/cli/normalize.js | 9 ++++++++- src/options.js | 2 ++ src/render/index-node.js | 6 ++++-- src/render/index.js | 2 +- .../dot-to-vector-native.js} | 13 +++++++++---- .../vector-native-dot-with-fallback.js} | 3 ++- .../vector-with-viz-js.js} | 1 + .../{svg => vector}/dot-to-svg-native.spec.js | 2 +- .../svg-native-dot-with-fallback.spec.js | 2 +- test/render/{svg => vector}/svg-with-viz-js.spec.js | 2 +- 11 files changed, 36 insertions(+), 16 deletions(-) rename src/render/{svg/dot-to-svg-native.js => vector/dot-to-vector-native.js} (87%) rename src/render/{svg/svg-native-dot-with-fallback.js => vector/vector-native-dot-with-fallback.js} (93%) rename src/render/{svg/svg-with-viz-js.js => vector/vector-with-viz-js.js} (80%) rename test/render/{svg => vector}/dot-to-svg-native.spec.js (94%) rename test/render/{svg => vector}/svg-native-dot-with-fallback.spec.js (90%) rename test/render/{svg => vector}/svg-with-viz-js.spec.js (91%) diff --git a/README.md b/README.md index dbf24b27..9dc5eaf8 100644 --- a/README.md +++ b/README.md @@ -74,19 +74,21 @@ This is what `smcat --help` would get you: ``` Usage: smcat [options] [infile] + Write beautiful state charts - https://github.com/sverweij/state-machine-cat + Options: -V, --version output the version number - -T --output-type svg|dot|smcat|json|ast|scxml|oldsvg|scjson (default: "svg") - -I --input-type smcat|scxml|json (default: "smcat") + -T --output-type svg|ps|ps2|dot|smcat|json|ast|scxml|oldsvg|scjson (default: "svg") + -I --input-type smcat|json|scxml (default: "smcat") -E --engine dot|circo|fdp|neato|osage|twopi (default: "dot") -d --direction top-down|bottom-top|left-right|right-left (default: "top-down") -o --output-to File to write to. use - for stdout. --dot-graph-attrs graph attributes to pass to the dot render engine --dot-node-attrs node attributes to pass to the dot render engine --dot-edge-attrs edge attributes to pass to the dot render engine - --desugar transform forks and joins into transitions (!experimental!) + --desugar transform pseudo states into transitions (!experimental!) -l --license Display license and exit - -h, --help output usage information + -h, --help display help for command ``` ... so to convert the above chart to `sample.svg` diff --git a/src/cli/normalize.js b/src/cli/normalize.js index 5c63a3aa..da4238aa 100644 --- a/src/cli/normalize.js +++ b/src/cli/normalize.js @@ -39,8 +39,15 @@ function classifyExtension(pString, pExtensionMap, pDefault) { return pExtensionMap[path.extname(pString)] || pDefault; } +function outputType2Extension(pOutputType) { + const lExceptions = { + oldsvg: "svg", + ps2: "ps", + }; + return lExceptions[pOutputType] || pOutputType; +} function deriveOutputFromInput(pInputFrom, pOutputType) { - const lExtension = pOutputType === "oldsvg" ? "svg" : pOutputType; + const lExtension = outputType2Extension(pOutputType); if (!pInputFrom || "-" === pInputFrom) { return "-"; diff --git a/src/options.js b/src/options.js index eeb85835..709578e0 100644 --- a/src/options.js +++ b/src/options.js @@ -9,6 +9,8 @@ const ALLOWED_VALUES = Object.freeze({ default: "svg", values: [ { name: "svg" }, + { name: "ps" }, + { name: "ps2" }, { name: "dot" }, { name: "smcat" }, { name: "json" }, diff --git a/src/render/index-node.js b/src/render/index-node.js index 822bdffb..d1ffee3f 100644 --- a/src/render/index-node.js +++ b/src/render/index-node.js @@ -2,8 +2,8 @@ const has = require("lodash.has"); const smcat = require("./smcat"); const dot = require("./dot"); -const svg = require("./svg/svg-native-dot-with-fallback"); -const oldsvg = require("./svg/svg-with-viz-js"); +const svg = require("./vector/vector-native-dot-with-fallback"); +const oldsvg = require("./vector/vector-with-viz-js"); const scjson = require("./scjson"); const scxml = require("./scxml"); @@ -12,6 +12,8 @@ module.exports = function getRenderFunction(pOutputType) { smcat, dot, svg, + ps: svg, + ps2: svg, oldsvg, scjson, scxml, diff --git a/src/render/index.js b/src/render/index.js index 6a5279f0..ed149fb5 100644 --- a/src/render/index.js +++ b/src/render/index.js @@ -2,7 +2,7 @@ const has = require("lodash.has"); const smcat = require("./smcat"); const dot = require("./dot"); -const svg = require("./svg/svg-with-viz-js"); +const svg = require("./vector/vector-with-viz-js"); const scjson = require("./scjson"); const scxml = require("./scxml"); diff --git a/src/render/svg/dot-to-svg-native.js b/src/render/vector/dot-to-vector-native.js similarity index 87% rename from src/render/svg/dot-to-svg-native.js rename to src/render/vector/dot-to-vector-native.js index 30cf02b6..3b0973f1 100644 --- a/src/render/svg/dot-to-svg-native.js +++ b/src/render/vector/dot-to-vector-native.js @@ -3,6 +3,7 @@ const { spawnSync } = require("child_process"); const DEFAULT_OPTIONS = { exec: "dot", + format: "svg", }; /** @@ -21,10 +22,14 @@ function convert(pDot, pOptions) { ...DEFAULT_OPTIONS, ...pOptions, }; - const { stdout, status, error } = spawnSync(lOptions.exec, [`-Tsvg`], { - // cwd: lOptions.workingDirectory, - input: pDot, - }); + const { stdout, status, error } = spawnSync( + lOptions.exec, + [`-T${lOptions.format}`], + { + // cwd: lOptions.workingDirectory, + input: pDot, + } + ); // 0: okeleedokelee // 1: error in the program diff --git a/src/render/svg/svg-native-dot-with-fallback.js b/src/render/vector/vector-native-dot-with-fallback.js similarity index 93% rename from src/render/svg/svg-native-dot-with-fallback.js rename to src/render/vector/vector-native-dot-with-fallback.js index 058ecde8..786e4ecb 100644 --- a/src/render/svg/svg-native-dot-with-fallback.js +++ b/src/render/vector/vector-native-dot-with-fallback.js @@ -4,7 +4,7 @@ const wrapAnsi = require("wrap-ansi"); const chalk = require("chalk"); const options = require("../../options"); const ast2dot = require("../dot"); -const dotToSvgNative = require("./dot-to-svg-native"); +const dotToSvgNative = require("./dot-to-vector-native"); const DEFAULT_INDENT = 2; const DOGMATIC_CONSOLE_WIDTH = 78; @@ -12,6 +12,7 @@ module.exports = (pAST, pOptions) => { const lDotProgram = ast2dot(pAST, pOptions); const lDotOptions = { engine: options.getOptionValue(pOptions, "engine"), + format: options.getOptionValue(pOptions, "outputType"), }; if (dotToSvgNative.isAvailable(pOptions)) { diff --git a/src/render/svg/svg-with-viz-js.js b/src/render/vector/vector-with-viz-js.js similarity index 80% rename from src/render/svg/svg-with-viz-js.js rename to src/render/vector/vector-with-viz-js.js index e4001693..46a72041 100644 --- a/src/render/svg/svg-with-viz-js.js +++ b/src/render/vector/vector-with-viz-js.js @@ -5,4 +5,5 @@ const ast2dot = require("../dot"); module.exports = (pAST, pOptions) => viz(ast2dot(pAST, pOptions), { engine: options.getOptionValue(pOptions, "engine"), + format: options.getOptionValue(pOptions, "outputType"), }); diff --git a/test/render/svg/dot-to-svg-native.spec.js b/test/render/vector/dot-to-svg-native.spec.js similarity index 94% rename from test/render/svg/dot-to-svg-native.spec.js rename to test/render/vector/dot-to-svg-native.spec.js index d33f4acb..dbc3d95d 100644 --- a/test/render/svg/dot-to-svg-native.spec.js +++ b/test/render/vector/dot-to-svg-native.spec.js @@ -1,5 +1,5 @@ const chai = require("chai"); -const dotToSVG = require("../../../src/render/svg/dot-to-svg-native"); +const dotToSVG = require("../../../src/render/vector/dot-to-vector-native"); const expect = chai.expect; diff --git a/test/render/svg/svg-native-dot-with-fallback.spec.js b/test/render/vector/svg-native-dot-with-fallback.spec.js similarity index 90% rename from test/render/svg/svg-native-dot-with-fallback.spec.js rename to test/render/vector/svg-native-dot-with-fallback.spec.js index 6052b65c..8936233c 100644 --- a/test/render/svg/svg-native-dot-with-fallback.spec.js +++ b/test/render/vector/svg-native-dot-with-fallback.spec.js @@ -1,5 +1,5 @@ const chai = require("chai"); -const dotToSVG = require("../../../src/render/svg/svg-native-dot-with-fallback"); +const dotToSVG = require("../../../src/render/vector/vector-native-dot-with-fallback"); const expect = chai.expect; diff --git a/test/render/svg/svg-with-viz-js.spec.js b/test/render/vector/svg-with-viz-js.spec.js similarity index 91% rename from test/render/svg/svg-with-viz-js.spec.js rename to test/render/vector/svg-with-viz-js.spec.js index d3b2d86e..0d521e56 100644 --- a/test/render/svg/svg-with-viz-js.spec.js +++ b/test/render/vector/svg-with-viz-js.spec.js @@ -1,7 +1,7 @@ const fs = require("fs"); const path = require("path"); const chai = require("chai"); -const convert = require("../../../src/render/svg/svg-with-viz-js"); +const convert = require("../../../src/render/vector/vector-with-viz-js"); const expect = chai.expect; From 38dc5dee6250f5db0dc941cc0e15c38f8b600450 Mon Sep 17 00:00:00 2001 From: sverweij Date: Fri, 8 Jan 2021 19:39:08 +0100 Subject: [PATCH 2/3] adds integration & unit tests --- src/cli/normalize.js | 1 + src/options.js | 1 + src/render/index-node.js | 13 ++-- src/render/vector/vector-with-viz-js.js | 7 +- test/render/fixtures/000empty.ps | Bin 0 -> 4124 bytes test/render/fixtures/100one-state.ps | Bin 0 -> 4612 bytes .../fixtures/101one-state-with-activities.ps | Bin 0 -> 4783 bytes .../fixtures/102one-state-with-onentry.ps | Bin 0 -> 4831 bytes .../fixtures/103one-state-with-onentries.ps | Bin 0 -> 4938 bytes .../fixtures/104one-state-with-onexit.ps | Bin 0 -> 4825 bytes .../fixtures/105one-state-with-onexits.ps | Bin 0 -> 4929 bytes ...e-state-with-activities-needing-escapes.ps | Bin 0 -> 4770 bytes test/render/fixtures/110one-initial-state.ps | Bin 0 -> 4275 bytes .../111initial-state-pointing-somehwhere.ps | Bin 0 -> 5229 bytes ...state-pointing-somehwhere-with-an-event.ps | Bin 0 -> 5249 bytes ...te-pointing-somehwhere-with-a-condition.ps | Bin 0 -> 5237 bytes ...tate-pointing-somehwhere-with-an-action.ps | Bin 0 -> 5265 bytes test/render/fixtures/120one-final-state.ps | Bin 0 -> 4347 bytes test/render/fixtures/130one-history-state.ps | Bin 0 -> 4311 bytes .../fixtures/131one-deep-history-state.ps | Bin 0 -> 4797 bytes test/render/fixtures/200more-states.ps | Bin 0 -> 6344 bytes .../300non-hierarchic-transition-no-event.ps | Bin 0 -> 5538 bytes ...301non-hierarchic-transition-with-event.ps | Bin 0 -> 5551 bytes ...02non-hierarchic-transitions-with-event.ps | Bin 0 -> 7567 bytes ...on-hierarchic-transition-with-condition.ps | Bin 0 -> 5558 bytes ...04non-hierarchic-transition-with-action.ps | Bin 0 -> 5554 bytes ...chic-transition-with-event-and-condtion.ps | Bin 0 -> 5567 bytes ...archic-transition-with-event-and-action.ps | Bin 0 -> 5578 bytes ...ansition-with-event-action-and-condtion.ps | Bin 0 -> 5594 bytes ...hic-transtion-with-condition-and-action.ps | Bin 0 -> 5593 bytes .../400pseudo-state-forkjoin-explicit.ps | Bin 0 -> 7322 bytes test/render/fixtures/400pseudo-state-join.ps | Bin 0 -> 7322 bytes .../fixtures/401pseudo-state-fork-explicit.ps | Bin 0 -> 7285 bytes test/render/fixtures/401pseudo-state-fork.ps | Bin 0 -> 7285 bytes .../402pseudo-state-junction-explicit.ps | Bin 0 -> 8149 bytes .../fixtures/402pseudo-state-junction.ps | Bin 0 -> 8149 bytes .../render/fixtures/403pseudo-state-choice.ps | Bin 0 -> 8407 bytes .../fixtures/403pseudo-state-terminate.ps | Bin 0 -> 5247 bytes test/render/fixtures/500hierarchic-states.ps | Bin 0 -> 5541 bytes .../501hierarchic-states-with-transitions.ps | Bin 0 -> 5979 bytes .../502hierarchic-one-state-with-onentries.ps | Bin 0 -> 6492 bytes ...rarchical-with-text-that-needs-escaping.ps | Bin 0 -> 5374 bytes .../510hierarchical-one-initial-state.ps | Bin 0 -> 4711 bytes ...-with-initial-state-pointing-somehwhere.ps | Bin 0 -> 5692 bytes ...state-pointing-somehwhere-with-an-event.ps | Bin 0 -> 5738 bytes ...te-pointing-somehwhere-with-a-condition.ps | Bin 0 -> 5700 bytes ...tate-pointing-somehwhere-with-an-action.ps | Bin 0 -> 5754 bytes ...chical-with-transitions-defined-outside.ps | Bin 0 -> 5686 bytes .../fixtures/516hierarchical-issue-15.ps | Bin 0 -> 12762 bytes ...l-issue-27-hierarchical-self-transition.ps | Bin 0 -> 6202 bytes ...-issue-27-hierarchical-self-transitions.ps | Bin 0 -> 7646 bytes ...518hierarchical-inner-outer-transitions.ps | Bin 0 -> 7573 bytes .../519hierarchical-nested-self-transition.ps | Bin 0 -> 8953 bytes test/render/fixtures/600kitchensink.ps | Bin 0 -> 14611 bytes .../fixtures/601kitchensink-with-notes.ps | Bin 0 -> 13090 bytes .../render/fixtures/700-parallel-no-states.ps | Bin 0 -> 4124 bytes .../fixtures/701-parallel-states-only.ps | Bin 0 -> 5557 bytes .../fixtures/702-parallel-transitions-only.ps | Bin 0 -> 5993 bytes .../703-parallel-states-and-transitions.ps | Bin 0 -> 7072 bytes ...llel-states-and-transitions-typical-use.ps | Bin 0 -> 8167 bytes ...and-transitions-to-external-typical-use.ps | Bin 0 -> 9388 bytes ...d-transitions-from-external-typical-use.ps | Bin 0 -> 9443 bytes .../fixtures/707-parallel-more-parallels.ps | Bin 0 -> 16679 bytes ...els-one-state-composite-with-activities.ps | Bin 0 -> 9262 bytes .../801-labels-one-state-with-activities.ps | Bin 0 -> 4809 bytes test/render/fixtures/801-labels-one-state.ps | Bin 0 -> 4629 bytes test/render/fixtures/802-colors-toverbal.ps | Bin 0 -> 11677 bytes .../render/fixtures/803active-and-inactive.ps | Bin 0 -> 14385 bytes ...edge-remains-colored-when-note-attached.ps | Bin 0 -> 6521 bytes test/render/vector/dot-to-svg-native.spec.js | 45 ----------- .../vector/dot-to-vector-native.spec.js | 72 ++++++++++++++++++ ...> vector-native-dot-with-fallback.spec.js} | 0 ...-js.spec.js => vector-with-viz-js.spec.js} | 17 +++++ tools/regenerate_render_fixtures.sh | 1 + 74 files changed, 105 insertions(+), 52 deletions(-) create mode 100644 test/render/fixtures/000empty.ps create mode 100644 test/render/fixtures/100one-state.ps create mode 100644 test/render/fixtures/101one-state-with-activities.ps create mode 100644 test/render/fixtures/102one-state-with-onentry.ps create mode 100644 test/render/fixtures/103one-state-with-onentries.ps create mode 100644 test/render/fixtures/104one-state-with-onexit.ps create mode 100644 test/render/fixtures/105one-state-with-onexits.ps create mode 100644 test/render/fixtures/106one-state-with-activities-needing-escapes.ps create mode 100644 test/render/fixtures/110one-initial-state.ps create mode 100644 test/render/fixtures/111initial-state-pointing-somehwhere.ps create mode 100644 test/render/fixtures/112initial-state-pointing-somehwhere-with-an-event.ps create mode 100644 test/render/fixtures/113initial-state-pointing-somehwhere-with-a-condition.ps create mode 100644 test/render/fixtures/114initial-state-pointing-somehwhere-with-an-action.ps create mode 100644 test/render/fixtures/120one-final-state.ps create mode 100644 test/render/fixtures/130one-history-state.ps create mode 100644 test/render/fixtures/131one-deep-history-state.ps create mode 100644 test/render/fixtures/200more-states.ps create mode 100644 test/render/fixtures/300non-hierarchic-transition-no-event.ps create mode 100644 test/render/fixtures/301non-hierarchic-transition-with-event.ps create mode 100644 test/render/fixtures/302non-hierarchic-transitions-with-event.ps create mode 100644 test/render/fixtures/303non-hierarchic-transition-with-condition.ps create mode 100644 test/render/fixtures/304non-hierarchic-transition-with-action.ps create mode 100644 test/render/fixtures/305non-hierarchic-transition-with-event-and-condtion.ps create mode 100644 test/render/fixtures/306non-hierarchic-transition-with-event-and-action.ps create mode 100644 test/render/fixtures/307non-hierarchic-transition-with-event-action-and-condtion.ps create mode 100644 test/render/fixtures/308non-hierarchic-transtion-with-condition-and-action.ps create mode 100644 test/render/fixtures/400pseudo-state-forkjoin-explicit.ps create mode 100644 test/render/fixtures/400pseudo-state-join.ps create mode 100644 test/render/fixtures/401pseudo-state-fork-explicit.ps create mode 100644 test/render/fixtures/401pseudo-state-fork.ps create mode 100644 test/render/fixtures/402pseudo-state-junction-explicit.ps create mode 100644 test/render/fixtures/402pseudo-state-junction.ps create mode 100644 test/render/fixtures/403pseudo-state-choice.ps create mode 100644 test/render/fixtures/403pseudo-state-terminate.ps create mode 100644 test/render/fixtures/500hierarchic-states.ps create mode 100644 test/render/fixtures/501hierarchic-states-with-transitions.ps create mode 100644 test/render/fixtures/502hierarchic-one-state-with-onentries.ps create mode 100644 test/render/fixtures/506hierarchical-with-text-that-needs-escaping.ps create mode 100644 test/render/fixtures/510hierarchical-one-initial-state.ps create mode 100644 test/render/fixtures/511hierarchical-with-initial-state-pointing-somehwhere.ps create mode 100644 test/render/fixtures/512hierarchical-with-initial-state-pointing-somehwhere-with-an-event.ps create mode 100644 test/render/fixtures/513hierarchical-with-initial-state-pointing-somehwhere-with-a-condition.ps create mode 100644 test/render/fixtures/514hierarchical-with-initial-state-pointing-somehwhere-with-an-action.ps create mode 100644 test/render/fixtures/515hierarchical-with-transitions-defined-outside.ps create mode 100644 test/render/fixtures/516hierarchical-issue-15.ps create mode 100644 test/render/fixtures/517hierarchical-issue-27-hierarchical-self-transition.ps create mode 100644 test/render/fixtures/517hierarchical-issue-27-hierarchical-self-transitions.ps create mode 100644 test/render/fixtures/518hierarchical-inner-outer-transitions.ps create mode 100644 test/render/fixtures/519hierarchical-nested-self-transition.ps create mode 100644 test/render/fixtures/600kitchensink.ps create mode 100644 test/render/fixtures/601kitchensink-with-notes.ps create mode 100644 test/render/fixtures/700-parallel-no-states.ps create mode 100644 test/render/fixtures/701-parallel-states-only.ps create mode 100644 test/render/fixtures/702-parallel-transitions-only.ps create mode 100644 test/render/fixtures/703-parallel-states-and-transitions.ps create mode 100644 test/render/fixtures/704-parallel-states-and-transitions-typical-use.ps create mode 100644 test/render/fixtures/705-parallel-states-and-transitions-to-external-typical-use.ps create mode 100644 test/render/fixtures/706-parallel-states-and-transitions-from-external-typical-use.ps create mode 100644 test/render/fixtures/707-parallel-more-parallels.ps create mode 100644 test/render/fixtures/801-labels-one-state-composite-with-activities.ps create mode 100644 test/render/fixtures/801-labels-one-state-with-activities.ps create mode 100644 test/render/fixtures/801-labels-one-state.ps create mode 100644 test/render/fixtures/802-colors-toverbal.ps create mode 100644 test/render/fixtures/803active-and-inactive.ps create mode 100644 test/render/fixtures/804lines-edge-remains-colored-when-note-attached.ps delete mode 100644 test/render/vector/dot-to-svg-native.spec.js create mode 100644 test/render/vector/dot-to-vector-native.spec.js rename test/render/vector/{svg-native-dot-with-fallback.spec.js => vector-native-dot-with-fallback.spec.js} (100%) rename test/render/vector/{svg-with-viz-js.spec.js => vector-with-viz-js.spec.js} (64%) diff --git a/src/cli/normalize.js b/src/cli/normalize.js index da4238aa..cc6ecde0 100644 --- a/src/cli/normalize.js +++ b/src/cli/normalize.js @@ -42,6 +42,7 @@ function classifyExtension(pString, pExtensionMap, pDefault) { function outputType2Extension(pOutputType) { const lExceptions = { oldsvg: "svg", + oldps2: "ps", ps2: "ps", }; return lExceptions[pOutputType] || pOutputType; diff --git a/src/options.js b/src/options.js index 709578e0..16d9e048 100644 --- a/src/options.js +++ b/src/options.js @@ -17,6 +17,7 @@ const ALLOWED_VALUES = Object.freeze({ { name: "ast" }, { name: "scxml" }, { name: "oldsvg" }, + { name: "oldps2" }, { name: "scjson" }, ], }, diff --git a/src/render/index-node.js b/src/render/index-node.js index d1ffee3f..bf5a9dab 100644 --- a/src/render/index-node.js +++ b/src/render/index-node.js @@ -2,8 +2,8 @@ const has = require("lodash.has"); const smcat = require("./smcat"); const dot = require("./dot"); -const svg = require("./vector/vector-native-dot-with-fallback"); -const oldsvg = require("./vector/vector-with-viz-js"); +const vector = require("./vector/vector-native-dot-with-fallback"); +const oldVector = require("./vector/vector-with-viz-js"); const scjson = require("./scjson"); const scxml = require("./scxml"); @@ -11,10 +11,11 @@ module.exports = function getRenderFunction(pOutputType) { const lOutputtype2Renderfunction = { smcat, dot, - svg, - ps: svg, - ps2: svg, - oldsvg, + svg: vector, + ps: vector, + ps2: vector, + oldsvg: oldVector, + oldps2: oldVector, scjson, scxml, }; diff --git a/src/render/vector/vector-with-viz-js.js b/src/render/vector/vector-with-viz-js.js index 46a72041..f9c65bcf 100644 --- a/src/render/vector/vector-with-viz-js.js +++ b/src/render/vector/vector-with-viz-js.js @@ -2,8 +2,13 @@ const viz = require("viz.js"); const options = require("../../options"); const ast2dot = require("../dot"); +const MAPPITYMAP = { + oldsvg: "svg", + oldps2: "ps2", +}; + module.exports = (pAST, pOptions) => viz(ast2dot(pAST, pOptions), { engine: options.getOptionValue(pOptions, "engine"), - format: options.getOptionValue(pOptions, "outputType"), + format: MAPPITYMAP[options.getOptionValue(pOptions, "outputType")] || "svg", }); diff --git a/test/render/fixtures/000empty.ps b/test/render/fixtures/000empty.ps new file mode 100644 index 0000000000000000000000000000000000000000..4bf7c95efae00ecea30c26694b48115add197800 GIT binary patch literal 4124 zcmai1ZExE+4E}8W3f_mJ9dNCkG%a>TQDAGgy8#1Mtiyfjib1uN#G7LIWH~Pj`rq%N zWIImUY(<(#Bt=qu*TEmRcgJrs^QewbPZDu(aBY=z#$M3G%5pl-f6`ppDmMiUPe#ef zfR2XA;CwI~o}DD8$>ux1!4Te5`b(IuTDaHdbog z0XmEA8iy_3N=j>M;VbV6IF_a4g<=)OlecXAC7-G4__LYGf&-(y8#8HeADq;Ax(E5z z=dJaFO^4ZZ2bNuO1=l|8}7Zfkb-Y{VFJ|@?uwmJN|d*cSaS9ptmQFI@< zM{uf@v<}8b$Uo5|g1~#B&7#k$f?_Fhw6rEgnrxCgp+v-~F*ZA9_Z^SrEY~aA@}GAa zzGSUI@JlMs$%pE5o?R5brYe=%hf7d1{!q;C81x=#fh--IAj>&Ypz1eIyGaU8fdQ#y z$|*3X-J=1q2~~f3+a~bNN~;Rojm|UV$o&J79HKH=O{r(Tm;uUD{6#w|&T8$maqm&% zTsS&->FD_jzoyyv@X=5ly2(Nj8HbL`GGv&flkeW)|~Twc>iXPoL_4i z^0hTmcadkPDSZl-<}c6(*2Rlp%SHVeahA)8DWrz(Tb!LNmEEOArJNe`qvCSJN}<9| zC`IwNB;vwkDy-Lxn^uou*H=wtli$+#mi9YFg((}7wrJwFCrQM<>Xztiw2lrar|(qo zt`bok7EO2}3ZwXYf0Oq&@Er{hc+T=&Io_k@_<$x35g$bp-wUHC+T<1P@9Qjp$X%Kl zR6GOH=;-UwE2`M@IrF4+UWM(^pAG!`4*ct@fM7vZRmeOgBJL1d`Qnq%r!+L`a+vc> zM4LQr)e7Yw-ps6AkW)*C?&VX#8OmJ+1C(gRaK8^Z5u*uA3YB@vHLh_G5dJ94=iyya zM{x+$4WPA9fG4ftqJB=Zbv&P7>OjiQ?J=wB$DnQ3Ugxl`KZPP-7U1D6v$0fj)A-RW zOPkLS3tszWYS8Q~t(xCumH$+<;&1R6A>}aAXe>L=4H4(%3J`y*ge)hd_h}NsWdjH) zJ%MH$SgK8>xFl?QO=+E%mHNgQj-}YH`oU+H{oNL-kC{nC=aQO!A9e`SP=iFYq*WOB zGzL5ofhnYflIx>$08LNN6O3Fbf>k-{!GJhCJ(4BPOvdx5h@>_$ z^K%^}wN;U;(57Ct)hyU9ihE^p7uBzh+qj-TL~M$n^_rt1EP2xOU5Zl#wLVy=Aw>Cy zO0!j6qU`sBZnn~9u?6ZFwkVBD_JD!K1VCd&v=NEO4e@|Sv0i)MVrO7&`?Frf(i#TlW53QZ55T-m?ttq_r}CO z!^{!d8(v)gEm2y9M?gi!O<@K%#i)FfSB@L66>)od0VM3}o6x$hl=V}0hmL!*ABA|R zT{q@8>KtBP9+JdVczAVnNR=Eb!h`Pijy|fn(wL_*HP2I?iL@*xHJX|Bh>dJSUk~xL z9&{pxq`6t~)1cGt=<@Ov8c;z;_u;oyY=`XXY7d#OwZUP*Mes%YwgdPU8eTx{L9^a^ zRi2)s=Fn(_PlNu1p}fHB6pzvix-}MW)ZB^7ONyD%9T(_(PyawyS3F^G!3ic2Tq_3D zwR{m8PLT1MUQ=8CQ*an*om|=K^v$^(~3PMCX1%T0~_u_xl)J!`7 literal 0 HcmV?d00001 diff --git a/test/render/fixtures/100one-state.ps b/test/render/fixtures/100one-state.ps new file mode 100644 index 0000000000000000000000000000000000000000..fea685fd56a5e0d02a0763f9ee0f43b4b4bb0752 GIT binary patch literal 4612 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 Z7F#gG@Q)-;_`}H#DWVxZU~vB|G*Q`S1G` zDao>P0gDY1o2)8U6^nJ|=(p>e)8A8buTF>kNE{t~uu4|OUeL_SV!q1$p_Q^_W^x+z zM^Qhf-XMx6@nA6SN5g1zf+OFuN~;ShD_JS3tjx=-!hsT~YdKTp1@(Z*Q>J}ymU)`x zv-f7*1%JxZ4`#7Yc~y#1t`t+MS(aa0qs>f&A5HZ!ODY;f5v9CH)l@XVd!`g3ELF8E z{*YCc$Fvm-X@80EQ=S->_m@g=D;kU^B(0Sj$AAv7kq}>QzIqM~iXt2u(@cSFrR+*- zDwge9G-NgZ(U`*drkJaosf0M98&%P=An+x}m|{xi(#izPNY&aw_e$DaRZO-ORR5$n z$bZu;Pp2lwt+CN6pH*{j1%LB~d<)*7RBH-9fB8tcqAg#O9=BAO!u>r`HdVS*t%ygO z8Y{JK0jwZ`neXr+=D-%-J!TyD^g*_ob3L zOI|>}H#&U<^}^ZzD80fvCGyG97IXUbUT1$V)hiUw%HAO@c7l1$RV|2oqy$ddkmtI+cq| zZ)orR+@s+`E;R^VrE;8{t3Kt~dht1xiPX+ryqe*ce09U1&j<@dY1~JYv!_7SAC7hx z6dVFEsdd63u%g4G9 z+C}4wM@?1vqw#Y`C(i(1VwL5qtfXx?&9tU%t{w_m&0Uxg(uOs^5a$Qbxp|;1$9xyw zz1cm-*Omr+ZH>@<$Wr8#E(J?-7w7_)`LkflN&N|Nn#q~TrH1Z%oGV!Du_7I*A=YmP9X`H2k>x~ z*;%T-X?Sneh0PZ51*iQwF(`JHHud+q%>Gfd;ZN`wA>`1~Xe`^88^F(t4Iu7T5m^pM z_ok6|mmR=|^bDHqV2L)R;*_xeYD(*@DAfXaAi}W;z6Up(S6IW&w;VXp9k2QW>YwA+Z${nC zq`P4nPj)9bQbp(_!dblNMw_-fb2PZIS8N+DMR--~Q%egA;|2ZKe^ z{rFuyQPlIr4UY^W9`X4n?G23j!{yo|3NbX8hdMVPX|uQn>a)n$t8hdMiGo}%t)e2G zaz{p}-st!j=sA3O!^GugiNY!j0VSDg4l`79w8|f|vf{#PMcABv0220fMQFP$m33Wr ziw--zA9;URR&ASKt8;vLc}x;r;qlegF_m(v2m{^q4gH~3N~51j)hbK4C(<&XEm6$0 zL+oV3`#OlnZQP0&kmh2=qd}`(@AC2l1t_Q9t^aNmJ0QEddV$R4TK{1FiSQQ9YzOc) zG`xV?alPJ~Du)x~92&&$D2{oeW#X@B%X7@97)vkc+E`4fStTwnDP-&or|8@I#2sB- zahJhK$D2iPzKE$U`@$C;FDE`9(%FcbDv%)SHeHv1g3PIIVUe_r8<9s5;nxkyE^ppa z_`#Y2BQf3XDSrp`e*gEUo5qvia>3qeZ zNq=${ont0Hp-%C2myF)#IOz|EsA3&{@ni_tfO@d7-Gs=(IXY|A$Kd|GcRWWSGH`A< z@i8|X|C7iub>+naTi3VCZo7*`UrGi1;XTZNP2=Jy_+g3eXCAd3Zxx y+oEk?>vlpkeS>H*J`;RHFv*zCXz!@sOJwY-v6AVxGjGgy87EdC2kq&r*y literal 0 HcmV?d00001 diff --git a/test/render/fixtures/104one-state-with-onexit.ps b/test/render/fixtures/104one-state-with-onexit.ps new file mode 100644 index 0000000000000000000000000000000000000000..f4b94f6955ed6234a8c7862e1dad673df8e9c495 GIT binary patch literal 4825 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 literal 0 HcmV?d00001 diff --git a/test/render/fixtures/106one-state-with-activities-needing-escapes.ps b/test/render/fixtures/106one-state-with-activities-needing-escapes.ps new file mode 100644 index 0000000000000000000000000000000000000000..b752110d3ecea95b760139353094e600653a8e24 GIT binary patch literal 4770 zcmb_gTW{OA5`Gqc#hizr32thbLBUA0t(F$G6z$kG^56Fx zQj%pSX2P>9NJh!{1V_FUPOA&5opg$vm1SKx9H@c1mNQjf&@nJ&&a`jMvdoKe z_SUTX;16Z~&MX$HbhW7EN-?FH73H-x+RQ}!-njQg=4hBCl=C82Q_%wNnNoE=7)o2IZowTKLOtux&{L68W z|4)lDpPCZ4#zw1h=H|f);pQ#*7Q8{J))asI^qxvZTfQbeZmBYr|NltEROwoEA|7dK ztkk*#bQU`_4qLpHlr61=ue>MVSe8wRVxj8Ozsy3G92o80m`Q{C;p`tuui&RlJ~`T9PCwu4;-97Z3B|LrcMKT)5|ejkX$$!E@Wu`NMd2;} zS%y@eYgZQ<4@)4hCv^Z7Rb_cfGp=ofvR6U?Jg-e z1yWM$j8kAmhercq7pngBzD?krjaD_d8(rkck=r{YIYi~Mo>R|!F$0vRIHv;@7fbE4 z@x`OYxo|Xn?&#zh;7hEEa#hr{ji-gyv@O*`CEeVo8KG=g^BsA90G*o$+H%hK;r*N4 zbAD}U$k*0L-G?GaP3cpxG=G6Ua9KVJwp`So5a)%QnNn)#zQ@_gO4&ndRLZ$A-)k;M ztQ0Ejj4~8|OCl~!uEKiDxOsgac74@UKKmt&Z)v|`RGO+GX^SR)_auqfSKSJojkeJd z74(ft-qj+C!=edKL}3(v>u-ww2EL;df#)pWmE%2Xj;Azpi1;X)`Cb@B(JrrWe_v+- zMDEhUpyC;jM#q02pHR)7FPJA~t2%6t|J%U79l-xS2?!QsRgKJ3BH|9QmoGjEeM&>4 zE{8eKM6}D}R;^I};mzF22Xbod(7k*rI75Z2VSoy)81DBWCt@^#S*dbQxy3b(0>U4K z`8>Q!>L?C@x&yQp3h<;gT-48LwvOi$OdUwsxjkm}@;+$WwbvD_>rbHwm;7&J)yFI(qH|46zYjZvX{bRW zTGJ*Bd>R9uh`xgJRowA=hEqhAzc0>OM$Be&6xx2vXwk^hlPtFgeeo zB9hw3+|PB8)K*2VLc4m|Ru;fY8cPUO0)cRnd zh7jc+DlIn43T3|^bc>BP4||}FVT;nZWDgiv%m6f2L_3j){2;QU4f6x$A3QAD=_l-( z7e({FxZx**NXLBs$#?^!e)YBXh+;e%%tKQfP_$WG3k_A|EU0iq3yFqYFRh{~pYlXT z=-!z47nnIhd&7&%za=WG@Cc~MxH-(=<`|XV7q#QYYen3iegG2o^-XBItd;dscZZI9 zvmb?cSh{Y^Z`65pdHISYrovZOSFfm+Q$={tUEk23YNa&hsa&m!jAtS(%h?jmOnbym zHlnYGc-*F)h#_fiR{S*Rv^&1MJV660>G(GMZWTKqySjRT%-7oBu;3#2qJ7%|d<_jR zpmy4<_g<6n955$Pw^_fplf6CNG+VWyrh`1H(a4_!+|@xy5bpw zOHMF~;A)Xl*YrhbIYG)~OlM#HyJj4TC@#WbeNE1UyxH=xO~lR5)_*qm|^%^5a;a6`3fnbokhXv^GES7?@bAu literal 0 HcmV?d00001 diff --git a/test/render/fixtures/110one-initial-state.ps b/test/render/fixtures/110one-initial-state.ps new file mode 100644 index 0000000000000000000000000000000000000000..962630813dbe47e333d69c10d0feb25330ced49a GIT binary patch literal 4275 zcma)AZExE)5dJLwira^vDX>J6n*>`B1X$m;0s|T>#lB=g!AP{tmKHUNa_kxT?|Y7v zWZ8|o6?RPC9q*3!&K~`6b9?ejX&=VIgdT%&D8lhd>8 zG^gW9mS5zP$@yvaDm#0LBcHT4>XI5Sy&~^q)o70c4Ny07rkYDS2Bs>R_O)%RQdhIr zb~OgStI9Wau~3z7L?f4qDb-9@H_jS66X{#)-|E8CB+IDeMX9Eu2R<;R5NV@)TmLS- zu5#Llg>+v<`mQQ0%llImxD`##FGxBk*MR};VKX5<+=F-Um%t&?GL3b}*r96{u1a<#P9OUm* zSLM`JxHUFLRWm=2R){z6$v5B)O0}Z&{fD1ji?t;6?;^i-Kf4I-XsYMnG@ z01Ot}Hx668msGUQ!B@c(a4bvFm0}geQ?P9MNiS4$@`qi>iUXs+8#C!}AG|cWIDmX@ zP5B+vfwR9UvxJ`t`OVP*bMo=Q=)YU_9g1gVZy7N95R*5ybsB!%zi|gYD7?o%D|(DP zAh<9}IuBzbYnrxFhqfDfQwXQs2_nl1TLYp=1_%ApO ze`ISw@Lj6FDTL~`JclU$iJC&15H3;8^h340Wzc)11+p|hMV51E|KM2xY_BugLQ~=-fWihI4)lAK&bO^J_yB zzP3T?KI#%RWlX`+!Ue{_wt5!qxTt?aTxvP9l{C^?BHMa;D5c02o~g2gUnMR;SRBrFChs-N<*U|hdIwg zvd!aOtyuoy&C3|5woU!h}sVAbqVW+Qz!!V5j=urwwCH{nm*W7 z?eqe%5VT(v7R}Dly8B%<`X5DW{tF&wNI8r&2Ft;76U2GF1|-}nBgY9De452@*#crp z&!E{BRv6nTE(yC{Q^x4JQJ)#Zv6Q;?IQZOZyxT#IF$;<4Tv6BW;|^gOYmi7*w2lLx z!GI?cFol#@azk|H(Dc6ZQw1(vfpR(~gd~b0h*UE()ZPec) zxkJnZP**PiY%y3VI-wE`5rIvJJ%riZV+}jsapGk6ygHrG=}-8?&DnT!G2SpuB)b=! zsUi&$5iC)3ugx%>1sdEqDz-@%aut_-=u!%!?t(-T_5-hhASVvbfMkgaTk zEk7AVe#Ym&8E;_J&!N^HQHn={ee7xjiZ+Yup|OgbM-`4}A<>YV)+wsXDNkgC?v06m zfte$=H@vvQTcUOfkAQ}(pTi7(j#2roZag<$C({1(BapCfXhNH|Q7%l~13DeeeiY-O z^~0Fosq^CM>IF$mg)gqJUr-~bitwPjxuxILQW?xsrCREOXCfo3S&L?70%9v0(KkXo zZSq0HgbX(;ei{tg9ba9&L<6em_%8nTitUkIUmqX~wKh5|x(L4L-*y1sK*LL@op^sgZ7DGQw+00 rSGh%BqPLjnp-(U~hjPfm&Slta!3@Ly4zL#wdJsZHKb(Nk$M@o2s!Dq- literal 0 HcmV?d00001 diff --git a/test/render/fixtures/111initial-state-pointing-somehwhere.ps b/test/render/fixtures/111initial-state-pointing-somehwhere.ps new file mode 100644 index 0000000000000000000000000000000000000000..5b157529e1171554272f77e611edf45333667f1e GIT binary patch literal 5229 zcmcIoTTkQ25`K37irNP>ARS^mHv&RPJGb4DRvNU7_Ju_wV>gLs9Jjaagk&QA`}wLb zwi96Xyc`6iyQ;dXy6&B$U#@RXf6dgrJRJ=padh-f%cN2Ig62A@7VG>6t);GWRnl-U zjs`Iu52JV*4~LUMG>XP2IPxWL3VA_wlQfbVos@On;6M%3buyRr1swxZW=#85t;#Gf z=Wo@f5B^YQ@6>WB%cd4}vX)FK=XrUpRiWl0e6O1KdD_r0iYVhnCLe?c-ZP~TVJ(|g z^+(d=WlTG^NCN!5|+ep1m z3aVD^T6i+Ye>|aZv8@)eWGW$!=tefQstA0^Fs7K&MWT}w%t$)zpnH?(QZ`Js6Xbp} z9OS=;yv!a{iCbe+$a3B+tQG9dJ^2p2K`A#Be*E;FN=ZAuCOz$_QkD68qWnP?wQNN^ z(Sy=SQM7>8Vu!|Ii+f4wN^AJacmj@PDS0VbMe$@T8-B@`vOfJ&Et8T1!{3dWINYZu zDf09cn0s$n71H9HO$MUQo|`Ap@kLIHv;@ zm#e~L7U-E)5JXvo(tkh+g~hMLl+U}@$8ec-Bm5v;kWKO@faWUk7jfbM&oo1~KZkQ$Y8 zq15-9%MmMu3OlD1#b1*MOO;8x-Z5@b-`ibZHJQ!-mBzHRe`8dt%8~e@iO-%S5t^!7 zp|jC0IHH`sQOUbn1fgBH@I({_;kW)K?{DBciV=8?=DTvd2kv-G^9B(g1as31gCOYg z3img47C_`KEfp%B0%>sk_wfnU?D?E|Qo63~_V_;z{_Oz%_lZTYAT4WTo)iIhh`oF< zNoZ0U8nrphc_xA`kG)#9{KK1>P9CX|n+Dy>q(Y-8Z)zBzLMw**O~{E5O<-Qi%uw!d zjU$UNM`1n#Z<9I*ZJ>4lZy^hhyy1d=PP26kA8Tq$%FgXEt5^3{+qS)~VO?_yML<1* zhp|j&DR@;oN=cdkoNZRs$@E9ZIFwzuQww@az&Z{jT=2j7D zPDta^$c9S?uqi!8;E4cCA;p$l6P+_0{}I70V#a`6y#R29!AjC8WoU>9Y(nfI%oYvSu=6b^PISks!H@IJ1ZS!UjYI^C745ZYr!zx?8(YP8;WF9Sr4L;SVbpz)2+Y3a)e^+S;c1X8 zaj7z%M@5hnD#^@T2T8svauw?8rLShzc0t%HlZU8&b==4G{2@YBTCH~+6?Vy!rs-0g zBB=G&LXHsSA1W=ks|sbmA9TxYp&s`@EklngaLFFfvX}#?vDLKO1jg)UT%29#M!#gL-te0Y#g|d8n--6RW}zEfX~4dZi^* z*#l2xgzk-re~FpHwl}=E%v++;5|4nIRI`8?ngvGX_j%oL`d!Oe=F2Ca6-mzO7KKqVdD+E1_80om2nD`ckDT8CK|!598* z2kigNu$ei{N?@Q``21Z8}!YY(}#Y`6iH}==z~cKtE>WCRo&LWnReRi12IP$);@H zQut1*3NK>1-P8RJ+Wq?5hZ`SAh`7AO(>f`f2BwZto9zN@r{{wSP2AsJ58%m7><@gx zPIKmd(f`T^O%x-iXeWjvs@2lGr_chdWe)X!0ftlf-UBERc1i@g0ANav_+YT^28%(FuGoZQ^%7>Yz&PM*&**Q%u z9ajEuOV)va9gbQ;zw8kX&n-*OdNgU}V(AIJDgb$5`^%Ql%3>sW)>t_eJXHrlD7L2X ztB%TD(S7u3JKx^~Z-TykR5;(XeMflTaIlUB=d;<=I|q=-`CvLcA8~?A zMuYgwF2~cscoyM{6XzeNjSaIGIFAOC2;?{x;ftys`;mjV2@BgjLI-XqDvYkknS=ZE zBkunx`;|+g`Mi`%FxdFaC(&?lhJZY#{mf}I)=gZ(k5;{0HkI`YiX*om(>-0O#ij!@ W4BzT;_5DfZg&5(V6=3!GqxdgbON68V literal 0 HcmV?d00001 diff --git a/test/render/fixtures/112initial-state-pointing-somehwhere-with-an-event.ps b/test/render/fixtures/112initial-state-pointing-somehwhere-with-an-event.ps new file mode 100644 index 0000000000000000000000000000000000000000..62eb1ef64107680fcd268ff5d2dc55d824187c97 GIT binary patch literal 5249 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 literal 0 HcmV?d00001 diff --git a/test/render/fixtures/114initial-state-pointing-somehwhere-with-an-action.ps b/test/render/fixtures/114initial-state-pointing-somehwhere-with-an-action.ps new file mode 100644 index 0000000000000000000000000000000000000000..1d723637bc00aee0c8302f65a03fc9166601e7de GIT binary patch literal 5265 zcmcIoTTkQ25`K37irNPRNQcbNIBu`)gk&TB`}wLb zwi96Xyc`6iyQ;dXy6&B$Uv6&Ceogg*IvWiladh;)QnJz2CCw{YF4o!Kv{qG}>4JuX zaWshOWEjQMcsQI4qER$H#gVUBldDUr8`&soDp}N7g99~CH*&7(OF99jNSXGXUKMFp z%-`uvAN;XM-|OX46-_N_xmHZ6=2>x5>0Hl6_(3-xvZSG56j92HR6Pn0d|*l;!df+} z@;BLJMNB)fl+_Orek>Br^8Qc>Zbie%lw?)Otzke1*hq-aw_hv=kD>^NCNx)I+o)|aZu`L&>U@9Sw=vFnfDhYhaFs7K2g{))(W~7{U(7lmWp&BOJ335Lv z4)Wh)R-})*z^$>#RWWZC)(ZCKo_q)1pi~eBo@Q}(FxTD2mc z=}}iQ&s#uiu|wmq#l56tRaNkn@dO;pQnEs^isIQ=HvF0`RekomUdn<4!{3dWINaw( z=2`Lv@}17ppP=42`yZ9B;ip8tIND;)zC7gFUn}(!idSWK3>f_ullOX6W$^3ajUD_= z;U530=sxld!AY)U)xg*Y`Dc1S5Ew7`Ec#v5P%J@?mX%JBCS7tz6p1j=x=PR3eP@qy zndMvB^Ph1V{>fDif}c_uP9{`e@@%7cMs*@{6E0TG@N==gWzZ+21+p|AAj>&Ypz1e6 z+a(33Kul_ra0;yH@Tf&}p=wU=+XUX(=BfsFoo6X>f_*W#tLZ`~EcZ^%q4|dmAO{MdHq%ke+pBNRobR@oL;8d4q@#g1PC1K@fC# zh5MU23m|frmKqgLgETn#^W>Cj_I$=XDOuNcd-5*_|9$}f^VA|(P^D^Qo)Q6fh`oF< zNoZ0U8nrphc_xA`kG)#9{KK1RC7-BKn+Dy>q(Y-9YibyvL@S2-O~{E5O<-QA)KKnl zjU$UNM`1n#Z<9I*ZJ>4lZy^hhyy1d=PP26kA8Tq$%FgXEt5*+J+qS)~VO?_yML<7+ zhp|j&DR zTRfLrRhb;E)n6jGL(CYEs}}&SFjy%%qZADhflY`#gxR9O8g{z2Hn0p^=DSv7)^;?Q~{naAT|3E?mluUHZ_a5JuexiNNezUM)dP9G(Wr z5|=vVc~k^4*D^J89VGdx$W^GTm%f@=+XZ2-Odg{8)o~x!^M?p^VYS|IRM;g?nx;!} zilEk83pqlRf2g$Fu1b{se$XwqxqjLMwG2Hf$0d6}%VG|ou0+s@MC4nMEv=m&F#q6T z;in(Fb1w?_zPRNlgNVm`{>69$qkc2B_J~3}8uXK^4Jg_y&O>b#nOGH$XerT<>s6(w zOdok7BXn;}{7cLnw!PuSW!@5HrSJ%-NjD3ap;=&5{*cuTH{MEw{`3=&u&-%CyH%|! zGj+GcV1ApzH=w; z>H3EQ0GrOl{j2w&^%I(THXv@?9W7)%8=CfP&1)jj$-%+B}iR5#iT7lug~d zqwsyDOFW6`Zcq7psQ2r?Ki>LCLdazW-qtdADwsk>ZMqAvon8zkG;x1>O@K!?u|M$% zJI7-+NO1&ZB@CIgxe{liVp(q{>M)-jrT)XW6)APY}Iz0!fTcLiKaq4{JkDXu8 z)Y4()54U6;2-xAMCG^W4;qbz;^sGmdRxXyF(5nKF7q-7_39T$fl4p&TQ^8Yp5QJiD z3cu>8+!ftNpVrg7bh?Ygv+K@L&if|l+gFA2P1|^c_YDW@XmBx`O}%pfnOqE}!;29o z$YeB#&+T$N9gJrYzBzIJaoX50dxi68Fo{5pV-dco>aia=h#Rr6-6M41cBI1WikvyP zPe0=RpR(V$B)ZRQxdela&wUcb6MQ>|914k>$1xrPoS|x?l2s!ga)n6=UuNM8C8GW0 wYLnVcWx|hNy>vI#_bUo0w<*(MT{*_412YWY{Bec;Np*%8;h!F0_2rZJFG0(Z2><{9 literal 0 HcmV?d00001 diff --git a/test/render/fixtures/120one-final-state.ps b/test/render/fixtures/120one-final-state.ps new file mode 100644 index 0000000000000000000000000000000000000000..8ec2336385de1ba39efacd67966ff3dfc5020eaf GIT binary patch literal 4347 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 WF#HFBJ$=y25F*+E28=$w7yko^?uV2B literal 0 HcmV?d00001 diff --git a/test/render/fixtures/131one-deep-history-state.ps b/test/render/fixtures/131one-deep-history-state.ps new file mode 100644 index 0000000000000000000000000000000000000000..f5a5effc70b16100ce4063c3b67e72a8dfd58982 GIT binary patch literal 4797 zcmai2ZExE)5dJLwira^v$*@?G-{J&8fc0%FFrdLw>`N9Dj6~aNWl^JK$DWb@zUN3$ zmYujOVw=1>-W~6qJ^AVO?)=wOKdSRVFA^sw?~IbQHdiz=vYfB7e`%#mmFa@|y9ilk0A$RxgV*D`s!? zx(ohLr0?`%p^CZ^m0T&NRI{wOH9FTb5x&>;`z)!cA4Qb%B2`o2fsafnL|CbMS^gpG ztcYnV7Send;fEs8EblLs;8xThjY%3KH#RWYmQ&I<14o_q`5pj2xLKYn^og`zEAlb*L!>e7CmDVwUiQmu$*nrb8S zyalutJ2Vbk+)GN9#=uwB6L2g`$qL0Pif3!t@JqH()%l-#Aqx%+e>Y~*;6Bwd&ypj^ zw>nRMfI4#aca^W;r$oLu+G5T>Kjzs#OZ5YaS7q-QF!~sicY0|u`1SC{4g9EZkAGEk z7kNZ*k}GLy7#kt~Opgcx>jj@hf2sjp7MaiOg-dI5oph#p;ehACVTw(zu5#=SYF7UoGt}DL4gU zQtO0MU`2;V9by-%_Vm6@;GIpbDsb0%mLf;)ACTk_mC9;P9rJ|@P?qA74pdw$bDNDv zkLtR1N8{Iyj$Z*DW0e)FtfFl=&GMYKg?cJwJ-2B_C>ut9N1h)*=lY4Zobz3H_hyfr zUt8+)wR5EIQ=y$GMiJGKbWtlyj}WS6q%* zDOA`QB`E%eL|Eulx%HND^Xk#?J%pBk51dRy{=$gdkRHBKY@p}%+6BH zO~XgME={&TELiQ=iAJ+Cv}u0VRrar<4S$2j5GjX|Cdab%Tpw{>ZUC{jipX$6TAxNP zTy_AL(lcnbgC)7H6qkg3uc+Wt3)x|6%qH|46zjr%?sjERE zSkuN0d^rX@5r8SAxRPt5Glr&vafFd8L9nR0VX&7?m>*m&*=V)P4nAb#H+XOHTyB)H zIa;ZIL~xIov7n}20Jy|prRbbeG(-e8A@&ev^BQZ|`JNLedf-*BPrV8L+-BI_jJq4A zabypIGgX9EB7((<_S&@5nWe#vonqT?A=hr{LzhArbsr=GyKi~51Tk@VS|m$c=#=MC z5y)K2)XsH~r+5Y?@Y`?!ujM5qg=^_HW;EqT(kU5Zl#wcc5% zAw>CyN{h|1MA`2K-C~pLr#(>1(4%r(vIBH1W&mmX~4;~hN`f_;vhmUTPkH|o5(zJ5azQ{kJNn>SR+sUke+Ztv(1wNg3esZ_19glD2$7PBRqS#A+K z*@(Ul;&~glBKnkbv*M>gtKI4K^%)vaL8tfb*DH2Fc5`!t%+^}xFy|up!oTeRzJ-QY zP&;ncd#}pD7&V7t{tO2V!Do!+1>UE4mR`}VHh86GwYa{fkXhYviN0@6JkZSzPZ?Zv zoLL0di}U5xqH1gVMjl3lKl@U)h4Y@mcSe_Z z6Vv^k_7BkS*WW(e`A|a4CHb;K)O=mYWR5=3=(0b^S%uLH`2}yQiD)V|-p@4gGlN}U z^Z~G6$Q?UMTucC&3}HO}29Za&9lkFvd&4mv(w$|8W-@YE@VSheWxri|LWuNOhjU9zh<--WN^F#ZUp0nE-XZ58(^Y@d79eYObn2fa!Eatvej z#(aC%ziBw?4TjN#P8)}uQD>qN?Oer)=p5FrkaVh~IWk_G&Fg-2({`g`Th+y2M1x`P zV$h#ZJn3DIC!_XvukG*MaCiLJ1t-11VAQ8U+>4oYbHRAf8}PkPfB*T&-I@+Ae5>x< m+Ggq(Bpa7BTaBC4#byU)82*=tv-t;^3^BrwsbKZ_qxcV<6$+LB literal 0 HcmV?d00001 diff --git a/test/render/fixtures/200more-states.ps b/test/render/fixtures/200more-states.ps new file mode 100644 index 0000000000000000000000000000000000000000..76f8d46e83409d3aedebb1b1189dd1e4dd89460c GIT binary patch literal 6344 zcmb_h>u=jQ68|jz6>}egCcwpd*|Jjv0k*HZ0t+L%R#IE1Ra3Os(13KEPG$3&PC==1=6$1< zRbEunH)`ESzpwJQYCe}$+lVGzN#>N(qPnhCsiwkzr`mT#)>0G%l=C8&_rfCYm{SP9 zk?nHvYuXl7NLw*a>+iyUUuBB*{YPdv6-A?j(z;GJS^ynT10g=%d@>R&i2`gI(Nscg zE9+HS(qie>!m@Spha>W5o5f64%q7GL-N=@f3xZtIf+?hImey$oVI({2V0)X^m28=9 zE2#S~$436UFRJ`rRX8<(QdZM;X1ridZrQhx4Nkcx|HH?3R7u+MG3jwj3$@UHk5t^t zvXM^3Bi*YyElY=R9y@dnd)#WumUWH0(l>#NWi3S|*+lWEJ?noi=CV2eP0iDa1H+z; zg>`tucLJDvOvqcctP9-h z;fXu^QRSBYtm;1Th~li2Y2Cuv2>D04LlEd&uvzq*Y+zW199`5ZLz?W8JD@=LnNoFr z&ewN-pU#VNLwon9FAX2*vIN76Tw0P2)u%FD6i=wh(o%sRrBtWf>R(Qxz0ERR&==45O$%ecklZIx3ei_1L>+Pa^%SE7bH1UCU2PV#!rOw8qTUFbdt>JT9lV^~}L>1MlXlU!-7iCG?N2t6)eSki4Sv`xcxu`#3&Wm)asKK&t&ZfQRfRH;SBVv8oe zdzyr=tL_4wjkewi74(fNh8p4dX3>QwqR{id^?{-f;O;0y;I%cMmE+y(wudxr5%Hck z)xFU3yj@=5{JPEpiQJ{RLd8>H^-h03J)?$izF?V@tr`QK{JHY>bW(cgPmJKpb z3XeO)UcTrg)F};%Tn=-d32&Fj)+|&0ahrLaK2R&yExMOZg;r6~HgLcKtr*v@Lr(Z; z0@F(7nsbX|oEU=M3ioNeOKQ(Ifx1Ij4;g%59q09Pn!Tgt7*`uszTBR$W_f3Q3t4sr8~R=7kTFEcVWcUsbT=0v z&KDbC^r-@>IU)6(1}0o~2$RxNShmAurD`OXg#BBSWmzm5`IRXgOMboS2VcGJLwlq? zWu78B*VOfU10hUJ4HDj(HfG=}G2jUgLZQW!TpgVuERB-@BUgrCk!>enFPktwm|W7) zs+T>w&(81Y*5hTmk+sgzM*bnZTf~e;b@c+sB?c===ai!%BCrXuhcKJ9Si{e^oH)T3 zUJW7|Oz_VD!#AmUj%2W@U=z+i&1T@anqUR!HJDwTYsLe&C-T0`Ecq!N_ZM} zvK&K59G;rU8s{qKc~p35snT4}bdx zxm*<)&qQTfO_yk9r6%ljBl>!T$8G3TL{xIK;-`VL?)38V3=OEF(_8ax4Le}Fx;nz9 zYpuC3b49od`?dr68Wz5W*Y7Py9kS_Q^%ex8%RA)dCMb5#^XVf z3=@hjQ07d#p=6MZg9#qwXVmMw`i#MkB_@M7MzZwfT>v$X=(JIDNf_UYRncx<7T&cF z8jL84?F3_huJujAmq6F?Fj}CMYA?GXR_Lkz$$|cVIx$3G_8I3C)q;Uqvjh9S}k+#NJV;P-B0A8Vj! z(%)err$9@MhenQ5hvML@!P;?KW0`KxaIki~A%3W1Q<)wNVY}0!p(mE?Va<-PJKsL! zH0T}9BUT?AX-!L<;c6stds~rJK}N}nGCtG zi=8bUCGIG&(qMY#8pIglb&2TIyi_gmgigyN2@ns*unA3(qlN$WUU9nH9h5)wd(4w| z_p+ep@A*ffE?^J;?b&pg+}&$V*k_yA^$9(Rea7U)4Wo!sUZmsJvFK zh$ni`mCW-N&|2)!IBan*DOpt&d}TZV$Fh{HP^_YOGL{X$WJ^__{-&3*;K1;AVyn=kI^YjO(SI+*T@-_UF$Y)1e%<1P@p8c^>KcIL~cE^CxuQ7S2S5*eT9^Tl& zUls20FN*FXUlE+-N>&YwjgWt$8G^ug!DrELs)k|-astnWL|PzA;{mdqBL%8{ zHMCt)a0H>&^uA5too%jaaMyX3B1i7-k>n7S%6dUP^MwphhT?(_ zR9vodlZ~$))lFlM#xEV6ya0TSRaUICns(tsmglr9)MF`|g-J6)*{Jk)1&og;N0vlKO@Pr=g61^U2M@glh5qW+9H&E#AcGKcPaoEurH>W~_h za-sG2n#&O@g$g^T1jWB15f(aCcD-ZVqMq4ZUp1A^|CYwIw7+9i=+cq+qKVI*BoUgb zTcWekE;yo$zEQ!uS_Gk8xbQ?22I05MVfBU0P~XJPp#|`1j)zs@d}y^Q2^5+wJjx9sJt?{Pz=!U_q6tk$Fl4+#&Yz z#U!CgX=v2uFz1;Fx;*x3+42u>rj>l8Mr|5&FOv$5rmU%9fD)}3?l&PPLNtMSp;AM+ z!!?d9!W@P947^S1Ahdzn0lbAQJo1JM`Z>+kF?_74Eh#&<$E;q>thQ}?UBkNO6pDa; z1P^1G&Qk8C;Y@GJDqA8JjP{#EquEuob)TC$`%}@D|AWUEDTk3J$FlX@5OH2^0Wr6V zsN#e)K8yNXtwAE#(AExoIR-otfGMQdl53(fhNh!Qgpn&ju&Bl{*vlr&4>p%fw3=lPAF}Zs z-djAETUD7Ht<@hQxI@eskgFE}t}s|BI;9j15rIvJJ%rh!!5VhH!D2;wZQAL~(BQ^av0b>78@u$OOCgN94-$ddx4c?{m^eHQ zk|i#6%JZlQWUggu<~m67RgtSuS1)}vv$hMuUYR^Z^{eAPuICRC>cVQhZgc&(2WlC5RE|sbfR@D^KwXKT6N$*TB3oKJKVbgB z!@^HLcIRFc?tO8~PX-Z>`TVo-21fmAYV8q)cr@roR~t~YS)7O3DspC3IHILQL#|hq zqB4EpiHy*_G4U@kbJ+HV7ngZUl$F9GpeEfcV1{OaQTcsVH{5tD5&F}QK*GMJ3GG(3 zs?5~gqQlZZ-O*`g0b>3WEy&;LI@Xhu08>;1lB0T7BZs}LGRypRWRIRgwXQEsd z^A(y|ZV;VpL|+f_w2NC2L&~{X@zbEy?)d8J1P!R5<2(E56+0lizJ7(w)LQE>>mvBV zzwH3Nfrgh*J9g{6SLJAenuE?7Q9K?yg3lPs3%pP9EWM-~UE!6QHR9@uLS}W#CHl^t zxTouDo-(-TShEPO7csSMU)ZK&Jm_pIk^!QMO&LE@;D;=nuoHf zn|Bnxt8|GcG2QJce-HJ3`uW4Hk0gYgbiz#uqc+h+JfyIFqZpwka);x=WHO%6^czM>rdEpV20tVP;Oa2Xjc#;{96pHK7SN{0aiuFNB{r; literal 0 HcmV?d00001 diff --git a/test/render/fixtures/301non-hierarchic-transition-with-event.ps b/test/render/fixtures/301non-hierarchic-transition-with-event.ps new file mode 100644 index 0000000000000000000000000000000000000000..b2404a46ff958b1a1d65935932031f900fd74953 GIT binary patch literal 5551 zcmcIo>rdlI694S}E9yR=0qKbCB$$T~(#~sdq?HCOqx-^+Mjg9JJma{%wiA+#_}}kW z{ji+?v(o7f0qL%)uBxtg=jb1|cc;H(dZtb%qevVby{naMb$vziT2_m7{uixP-Q>EY z@n{;2Vmcm2aT1TmXQOBmO;2#-OWqdhikeooirQM1P2S=_1JtdYtLBQ1fhjYleXCbx zmY4IldNTxnD6@BZxm0D_h(@jzQ>uAh-qyO%a}mDR?fX1!X&gnA@gh?X!UJbaDMZ+) zc2)f*+q{fvCzi7QA;J%3s#)H@Rf=2D_$(n=*K%tZ&;d3Q;?vz{%fX{4!l5&oE3j=< zy_N-4t8Ohknd3h_qj0gU7OG?_A&%%ywX~`Te917Tn9_x;WeR4boOaN?m366FCff;e zKN$}4-$Pzz54yyyu_;tJZx_}I_U4{^2i~Am8wx*udQYXI9bc24c2w!g{5?_rpo&Iy zBA)0$*Rm)&KxeT-)`F0!AXUOD?ORjlEsR6aY}VNO5Kiu})&`U%C0vU>)MevQdHy{dEg_3*|H z{;F_~e^K-h`HJAQP_k}eY=rz1%@72}3qFf}R}B00s+z~}0Otr4FQ+D6! zgIwmtmiGK-oQ8jLRe<29RECoY)#p6BD88U3m4yixt7iDAT;DP1Bhms{8jq0W94S!s zo1yKKf>R(SwMjVz)^vE(BKlA@r}u3F?`#XzfV(d83^{WD6-f?JnQRs`Fki?3WhgG` zK*i;%FxmL(QQfxoX#CRAk7xibvSuW?glm&F(e z-3pzJcEJ(l^qorHH6jS@!i6WIFbKa7H~DY_-%*UfYiqtM$9v$8$24yd@j);*y)X!Z zKCf_pQ)dB0?$T1D;%Sfu$A283P{W?jnJ1;|#%_=Q>EPcF;D4N01PiKFgUnMR;102u zFD401N<*VAhdIwg(C4vN%a(t5GppqzwQAF%dzn;dHRWvs15{|maK8yT5uypqOO+YQ z9jl)TIr%(j+ zBX}6g^p$8SeH_L(EblIydC{ zz1<;9Z4DB^hPHO#D=^@R08AmpmRu8^F*Kbd5k{^Q!J=BnU@x06KiFI{(Q1|he8|Rk zcyIASZdGk^v{8SG;2tq!K(1Z@xWZti=#(-vLytvF;qN)`h0S)PP0W-7P+Ob>jy(%XOY7WJdF~!rVBlwK5yu|wy&(bTp)iqwJc`L53DP&f6T%zyY ziLZ2X!&3$q9cvcB^&+OO?F-v3U-M8l zb@QIWceSqYB&Pd4<-bC`Uw-{?=OYOrC!KIp!l+Ah5sxYC-Y7<>iQMsYlqA!H&M#2u zY{#Kwl$=B3V|hY@<}3DRL1BhtbMt5*##Mfb$D;{;C^_>J$N(~(KxlH#$iWi1X-1Xl zWp@hs9b@-ndqPdET!d2!wm`sIM|a$?VV=9ib9Xe>RU*9IW3?*7sf!bE%lMv`Y8 zcPe~e;^E5Q z$9p0sIM3Z2D}QrOHUMEcc9An!4hY9Cay;uvA75B{LhodNys-VHCv-|Nl00jyoC=<* zhaj6>)c32N$~)IaPEUcadtBf@_pm&@@lG~{qI-$Cyz82^@Od}Bpky+-n4n|1`4Nz_ zi_!EPpS;AEbmzDcmQ!dnPB2{Vi?@a2Ip;|{I*THBG8s)L$z;HO;vjA;MM>Esbl`3b z#k`OC_TWClYV!Y-?QDE_Np$QNt0Sy*?rus+G>YO&I&Sn*5xO6~ZX?>yn=U!s%qskF pI!Ig7o4%mEa1%H4hig{Y^k9bJdr|IRKj~c%BmBb*tUiAf{{clE%f0{r literal 0 HcmV?d00001 diff --git a/test/render/fixtures/302non-hierarchic-transitions-with-event.ps b/test/render/fixtures/302non-hierarchic-transitions-with-event.ps new file mode 100644 index 0000000000000000000000000000000000000000..03d6ea80e8d6d635ece0edeb71d48978dfdd0a02 GIT binary patch literal 7567 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 HU!DH~un78b literal 0 HcmV?d00001 diff --git a/test/render/fixtures/303non-hierarchic-transition-with-condition.ps b/test/render/fixtures/303non-hierarchic-transition-with-condition.ps new file mode 100644 index 0000000000000000000000000000000000000000..f7b516d6b988d6b13cfbd796dab83b3d3c4bd5b4 GIT binary patch literal 5558 zcmcIoZBOG!68`M|6?GrbfON!m5(116($3r7NGlCmM)!q9qmJDqo^jk++X=}={P%mR zU+hkRS?P3#fOJZ>ecztEjDI)f6obG(g?RnQGqBF)&rmwD0t) z%8P3DPH#f+$0~oX7YkLjjcDXrF{PRn)lIESJrnT<-F_&tmWD|}IWKbcAUtr<RRf zYFEqOWLs1z?ZiUXKScbo$~4RSx5{uU8lFu^*0tOk26TW;g!p{>#d7c{N^t0mW(sUu zRj*}9%T>1)p3LzdpHV#DF6XLZDj|;OR<*QR68Mr~Oetk^S<4K}NIC7Gdn@ZowM@1X z9U6x%?j>cbx`wZeC*W9?QdEjn6i>#o@z-LZn$zF)LRK6Y{%*{~ z;Xb#rEV5US?{t~}1og_rY`s7Y15pkwtL7$Ko$kKFxEaymp zs^1K4pA?(|DXC4yDX^x)qZZMJsyV%H6L@D^ss`M3S>(u(yL%)#MCG!XQ((TB0m@KZ z(t(PLRcW&E)uXy??a}n5qmvhaudynsb7Z(X01Na{&7QupQ)gbefh`2-S z<%>x|lhV+r%VEwl5%qcO)w1Ou-pp(HNUhqm=w2ojT1`dUzyM3MVz}RgoQTl`W|hhf zgvsiW8iY7g)hvhc(kE(&v+tz-CDQ(IDYZosTrO|7#2&(I-eL_q-*Mt3_q-YmX>fsG zyBUX@Nw{GeOLi|fQ$=hfB3P_wuT3|d85-Q!Dz=Lka$}c1bSZ{W_dy~u`;J#fkP?Td zL9)b!&Uqdcku0^$&0GgbzAADR>g%PiX4ZC59F)mJR9GGNae+TXtShVaj-$dZdD1jp zicL zhlQVh?9RO?-238|p9~@$^Z94v4UGED)Y>D8@o3PGt~Q`(vp5g6RpiX7a6}7BtC%wgLbUR>rav8)vy0S)PP4l}fKjLIL1rsc+4i`buj1QPZ&O=!1j zRBfj24jl)xAK7?VwcVKS)OmAt^@b#-!Z+8~Z>W(EitwPjxuxIKT9ufmaY7V7mBTC0(NALw>d4=~Wo~3W;M%Q?y7Ol9tqL^9Ta*4ik zC+_L`nx_mdI@TqSak+ZVR!I63J#y7&e8Hjtt0`mswuLuTb>SX6Co-pJ#G@M~Vm zrf}X-{Jz#pyou>aHK98k4TJuQ$zXC0jgRFC1>INd4}-!?$L8uuAjXw`N{53HerR&$N00zA9zp2joRPs2$!TVl z@nv@u59{;9((-a*5uPvrVR>=h5&C67csa6XJ@d=UPBfOD&}##bS9gEu31K3>03*q> zPCFGmRS!u!<@;4ngp9`uM`q6M82DpupPA=LXVf5hO^f=9F2lXtj3KUPVbg;dhObAtjs2vBL5%S4GqC#dN&E+~RL)TV literal 0 HcmV?d00001 diff --git a/test/render/fixtures/304non-hierarchic-transition-with-action.ps b/test/render/fixtures/304non-hierarchic-transition-with-action.ps new file mode 100644 index 0000000000000000000000000000000000000000..c633c97398daf14d30ef25f0cb23ee93d7a3d4c8 GIT binary patch literal 5554 zcmcIoTTkQ25`K37iaHNyKsv;B5)wcNY3H^((n^Dt(RpFfsAD&YXB@ZJc0#fd|9!ve zi|quMm5z21knXDLs_MFTj{b9Vd-_wVXX4Wo!sUZmsJvFK zh$ni`mCW-N&|2)!IBan*DOpt&d}TZV$Fh{HP^_YOGL{X$WJ^__{-&3*;K1;AVyn=kI^YjO(SI+*T@-_UF$Y)1e%<1P@p8c^>KcIL~cE^CxuQ7S2S5*eT9^Tl& zUls20FN*FXUlE+-N>&YwjgWt$8G^ug!DrELs)k|-astnWL|PzA;{mdqBL%8{ zHMCt)a0H>&^uA5too%jaaMyX3B1i7-k>n7S%6dUP^MwphhT?(_ zR9vodlZ~$))lFlM#xEV6ya0TSRaUICns(tsmglr9)MF`|g-J6)*{Jk)1&og;N0vlKO@Pr=g61^U2M@glh5qW+9H&E#AcGKcPaoEurH>W~_h za-sG2n#&O@g$g^T1jWB15f(aCcD-ZVqMq4ZUp1A^|CYwIw7+9i=+cq+qKVI*BoUgb zTcWekE;yo$zEQ!uS_Gk8xbQ?22I05MVfBU0P~XJPp#|`1j)zs@d}y^Q2^5+wJjx9sJt?{Pz=!U_q6tk$Fl4+#&Yz z#U!CgX=v2uFz1;Fx;*x3+42u>rj>l8Mr|5&FOv$5rmU%9fD)}3?l&PPLNtMSp;AM+ z!!?d9!W@P947^S1Ahdzn0lbAQJo1JM`Z>+kF?_74Eh#&<$E;q>thQ}?UBkNO6pDa; z1P^1G&Qk8C;Y@GJDqA8JjP{#EquEuob)TC$`%}@D|AWUEDTk3J$FlX@5OH2^0Wr6V zsN#e)K8yNXtwAE#(AExoIR-otfGMQdl53(fhNh!Qgpn&ju&Bl{*vlr&4>p%fw3=lPAF}Zs z-djAETUD7Ht<@hQxI@eskgFE}t}s|BI;9j15rIvJJ%rh!!5VhH!D2;wZQAL~(BQ^av0b>78@u$OOCgN94-$ddx4c?{m^eHQ zk|i#6%JZlQWUggu<~m67RgtSuS1)}vv$hMuUYR^Z^{eAPuICRC>cVQhZgc&(2WlC5RE|sbfR@D^KwXKT6N$*TB3oKJKVbgB z!@^HLcIRFc?tO8~PX-Z>`TVo-21fmAYV8q)cr@roR~t~YS)7O3DspC3IHILQL#|hq zqB4EpiHy*_G4U@kbJ+HV7ngZUl$F9GpeEfcV1{OaQTcsVH{5tD5&F}QK*GMJ3GG(3 zs?5~gqQlZZ-O*`g0b>3WEy&;LI@Xhu08>;1lB0T7BZs}LGRypRWRIRgwXQEsd z^A(y|ZV;VpL|+f_w2NC2L&~{X@zbEy?)d8J1P!R5<2(E56+0lizJ7(w)LQE>>mvBV zzwH3Nfrgh*J9g{6SLJAennUquO7VE?2tH#hFYrFav-FZ~bcI)H)`+Vs3Ypa{m*_ip z;-0RrdCK6TW6dJCUc}V4ePNr9lM_LW=$w2TNKkhD*d>5sR&Itx)z;>XJdOyz=A~>3 z=N*ObDqZ4DOm}t4BRCuJltp9E|WolQTbp^dRFAgifZ6>@AU;W>y(r zv`6uo_-?_3)>9R z55`k`@)FrYE$Ixgv!F0JV-WHDMoJaBCEJ88EvGHg!>aia=h?`4MQuYWPxSc~W z@MFL|xKF>D{F}0!jSnx0mi=ONgq5c5rl?kfD4x` literal 0 HcmV?d00001 diff --git a/test/render/fixtures/305non-hierarchic-transition-with-event-and-condtion.ps b/test/render/fixtures/305non-hierarchic-transition-with-event-and-condtion.ps new file mode 100644 index 0000000000000000000000000000000000000000..e943b43bf9830c3c806633b90e99ce599226aa5c GIT binary patch literal 5567 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 HAH{zFaD&v% literal 0 HcmV?d00001 diff --git a/test/render/fixtures/307non-hierarchic-transition-with-event-action-and-condtion.ps b/test/render/fixtures/307non-hierarchic-transition-with-event-action-and-condtion.ps new file mode 100644 index 0000000000000000000000000000000000000000..45a0e4605c8364c1d9511a4ba54187f2b60f6665 GIT binary patch literal 5594 zcmcIoS#R4&5`Jd?irNPwHn0{C$?^fiz~q_@FhGoPurHnDI{L@$-RUoxo~hIEC=y3U?`kDmU0>0>mepdN|3zz6H@Pk; z8BL;5OvgzSPvayx8%5)2a)KjY^0rV{)U>iy)Yh_W@)idgpl;<{HCJ>DOqnt5TfHi? zyqv$)n<4l^nZ47?r7GJ-G;*z&QqA-7w$_E7i}1Z}-{)ydNfc4Wi%dNT51cWj5MiU* zRrQ-}^D?HLSjzf`2tSmmW_kZsDQ-o{*_32m%dKHR2iQo6Pj{a!2alo%ht6oOz_wNO zS{78Ty0!3Rj{oG0!o{{)sFJCKIHEh%(yAixCBv9vN*A)0DVULR+CleL)}?BhY$wS5 zWH`uw4|$nA=n}WarcmX)U05sFn|tydc!N@HDE#>8J(Y@fd`)`VQKc*M_eA-FDjL;^ zc%lbg%cAH2oy87~!xs0F(p6og`Rr(iIsH5<@;_JVCloKr?in!pH74)$s?Oop!y7yJ ztHM40MbSg#D}vKP$-0HH5%NzoLl77*_$>NeHBc-?j#jl!ktTg|M-+)L)w<43*?p%E za+w!f+Vh`r8ve;u0fL`W8BQitpY!aZ_=1{L7A9P*n&GE%eaE1WNDE|XJVKUpq(Ieg zhPF=%PJx)zCgl`Z)8SEz=tI?<-nR+7vn^Bu?z+e`XiF92U-m6z+hpVCfpunfVYr^N8WJ3FsIo%hL1J1C1vLhm^G`J)wXM|YgpHuLJ`o9 z;9)G&Tgu%uoas$f=S#$b(SDO^G`pI%?sL=Re<|AXfAE+fKkJ?mcn{F48D3Z-0h);n59H?Zpig} zyF-}T8YF@ZZSBBUV89arm_mvzxh6VeXgZ!o7`ajei)tN%y==n#U~|btt62{4AsgS} zy~PW;Rkg{{M*S&*d&G!q(|)^np@N$gKMgwVj<2sz(11!hzPF!Vu>-Q3n^(w8t+fubE`l%o z+YaDcXm|y+W4GRWRgR~qIW&%do=hCUXN=_~-luq$UeT?t@k-5GaeYl8v%2FFeeX_u zrJEa`GPvkivk0yiF?DTU*rsFUB-1l=@eA^8AVt~rW0!ym%*xHMsM^}RktY%1*SwTX z;k>8tU9Bs;iJ`?%`>)XNmtQ~J`A|a4NhjUZFzPa0#0iDnBgF_cp_@!b)9GYN=NBk- zw&l=tG(CsL$MS>*-B;`ngThS5=IYTvj4S;VC!;Zb2)B2QYyg>zA#{4q$iWiHX=atl zWp@-0>+{Ic@^Weso^Sxd^5VQB^veO^<=CF}%r7rH(O7yyuMI$6-TkE}go*e9j3m!G z?o{wpJtXdw?^ivQzoX;I5!0K`lVLc)C@;E6?1*OnovY)?b63y)2d<6}Jso!@9sLLMcdm_`o&w+ZxWIqzVR?Gvooot4_Y`w^*L7>*^Deod>3DQ8M$2+}2gupQ zXmXBEUgBH2bKD5a2{cNkm@fCl+rsgj^Ee)zMJSp$HW^RH1NLJFadRn3${wKucXKEP zehjz=_Ze1`|EFwc0 z=%R!#DR`$J$WS(DCun~A8P=t-8*hc5V+RRt+SnI#BJTHQRB?R`n;y(Ce1*!b?k8;y NVuXLgfz{`a;y;jh+718! literal 0 HcmV?d00001 diff --git a/test/render/fixtures/308non-hierarchic-transtion-with-condition-and-action.ps b/test/render/fixtures/308non-hierarchic-transtion-with-condition-and-action.ps new file mode 100644 index 0000000000000000000000000000000000000000..f435b577171ebb4d1110a2cccf38a1174af8f366 GIT binary patch literal 5593 zcmcIoZBOG!68`M|6}2m&0qKbCBqV?k($3r7NGlCmM*D?DqmJDqo^jk>+X=}={P%mR zUu-A9taQ3VK)S1{tE%h0bM({A?ddP6o~hH(AQDGM?jrjd6B9I;ej)z6e6ru zvnqd+O;*IT6H8fr7vYB@(Jb!|mEcx1Je!cLD!DZb=l~lD@#*%n<={~i;m{e)71%ba zTFacuRl63R%<&(eQMlNa3so?c5Jz;Y8d{YEzGN6vOvyr4G66GEPCMw{$f{5clkEh# zpA-lA?;$JF2VLOS*yO61Hw$Y8dvi~|18-2O4TT>+y{AIaj;~2iJ1TW){+=j%PE1BmlptabcaoFNsQnIQl_{w+!j%6uXp;$%nWGowg$(E`<{ar6*!GYoL#!MXU zQzP>%c?J1a=jjhnubln2%GdByBA*>?F{htrdG^;z{ea>{*&PE$zsBU9UR4?VdU#_8 ze^t20zbLwod_{1QD_J!#HbVZ1W(We~1)oK~s~UT{lL6rWR_$lQdBRWtlltZy0g5ov)ejR(kbjufc+ z)zEfH!6^`v+9aF;YdSn?5nZU7)B84ocec5z!CmKBiX6GSN0LKSD(eOH%oj318Hx)! zP;t4+O*X!IR5y)18ozXO@&fQRR#~ymYTAVlS)S9bP>-c-7ADOIWuwyHk>>}{g?^+R z=X@XDzuAoQYez%Ac8=72%u>{pJ_SoN7w7|5#f#vIi~2L-G?Q~($Q-)wac*R(szYj2 z%7xb7Yc5Bu6e{eT5)}W6L|Eul+4YWbi+W~vebrPt|3@0r(*B82p-V^NizYsMl0;~# zZi&uDyWog2`bGusY7vBX;ldM97=+*Yo2CIaEI8- z7n6i0rJ+%q!<=U#=l3=;t(B$MCVHwxsOb91#I!n2mhBLh>t89r_Fxqbtjb>NT)_rd3>~BR|{tq5wq#Q)juR)k=ha|HgLC}a z&A7jr^fydn$?gSbstAol1dA2zwP~j_LxUSz#dhIRZtT*BE`>1aK1c*+-|}h+V&d>L zNS3(NDbJ%Kkhzwrnd>0QS4FNuUA^?x%-Svpdu8$v)vu2GxSl^ms0*w0j-$dZdD1jp zicBtH_yE;fR(J4Y^)b zipunXCo)3!#>BtG%wgLbUR>raQC13%fSPo(fEk(vM&W|JitwPjxuxIKTIHChQnk(!o{4f< z%vWe;xj}TY5q&+x(=KjB3@PVk#ZQA)yW^{?6EvWLj_>TJSL}f7`uY_zQ){imtc&0a z|F#481{z*M?bxmNUX`N>Y7UK}DaGTlBlwK5yukYu&(ce}(G^~)StG8lC}dW*T%zyX ziF>-f<|%`Vjx~$mdJ$9G_JwUaR?ct=HKKF!Z6HC}^<$R+idnfC7FAoDH}W_l{F;}t zDV%o{zN>VJH!-y6Ykv>@e);votq&!{oOIGn4Wl;GMLeXieWVznCUl46!DKR?(DWRo z&bAzy3?@@(d@N6>*L}tQFeuD)Y_1;l#JJK=@o+H04^7Ve2-1U$M-V!hGP1Wsa++CX ze9<1o!+IK7T3${p!V~sDSe{Q?Lci=0UX1Kn&-~(|6^*4Q^x6RA)!kouLYRmzz)13} z<5mSv)j{G``EJ!w`8ztUFpHOtr6B{ySI4f#GaPw1TtkQcVU^n^|+Mv`ZZl~ch} zbr58;i~4TWQF-Uu$muBXeUA(L=N^`)*WSsdP_$1mmv?Qq7C!HW=QJ4&&PQljZh!>j z?0hhu;**#7mTrn0VL66I!wII#eet$%Jm)-$2WL?PPfiBo(PY$PKXMQ^m!hQX5jt=? zhhpHzfO~MCel_`j%62wByd+xoi`5ZUn!209@#De8XpEj!>!rdli7zU-VcduGGxy*( zcuz4xZB(*qZpDz2?z(}5X=Z&10@ R{h-T1jPOr5u=@N_{0E(^+K~VN literal 0 HcmV?d00001 diff --git a/test/render/fixtures/400pseudo-state-forkjoin-explicit.ps b/test/render/fixtures/400pseudo-state-forkjoin-explicit.ps new file mode 100644 index 0000000000000000000000000000000000000000..1824965c1e3a5350e9070ae6b43bf741bd7c54b5 GIT binary patch literal 7322 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 P1~JV34HB$AzGwdfuQ9sV literal 0 HcmV?d00001 diff --git a/test/render/fixtures/400pseudo-state-join.ps b/test/render/fixtures/400pseudo-state-join.ps new file mode 100644 index 0000000000000000000000000000000000000000..1824965c1e3a5350e9070ae6b43bf741bd7c54b5 GIT binary patch literal 7322 zcmcIpTW{OO5`NbHis^$92dKr1C`t+p1I?``K!F%_a9&&^pvkqwgyO0sC0iBz-_N&K zt`y5{kRHRfc4ua1X6L^4$xoM8XTKEUmY?;0>+Aixjbxl^cWrqVTP?y=9x3B0Fn7WX(uf@79 z%6k4v^}(R?s)MTGf3Ep66i>?T8A$XoCU3;LDdE?{ z8yomh;THd-Xdih*a9;7O>0oSx{3G2W2$UCW7X8j!D3&8fSB=P#CVg^;6tW-}qAAX# z`_AsNWm#=$&wt8k_?4|I5IjqzIH^$mmZyv2DYbc4sc_M11|RCpl?1&faC-Wi}UeRzdeY&Rw?R z%^@`^}UDOA`w$0M3|i1@)^ zu6p5MFzE9N_g8fmK;$kh1uC8Z>EQH_)0fmr&zF)X<(pP-Pk%P>F9+~HUTTCC)bJLW z$Js!3h`oGKNvKj98o3;ndBz5P9$U3^`G+@)CcCGOKXm9`Diu0GW!J(0E3{&`UxgeC z&;;f+FBIht*ErD#brj}PaF^7BKnH3Muolwr&>C*w=d`qr;-gKiNu_f=X6^b`YwOzU z2G&)lPz1z1cqq&CmNGXDZpFi@DVK-^rTs%L(Cix8n$L%}{EO38{sxZ(DTk4!!qRyz zMx3vjz)+;P3WO zK4zIAIv>dNd%Z)L>Keob546<-UxfjW4ZsvqbjelG89~!g8e-(i5iGnj4EC}K^MlSM z6|HLN;R9)WgSQs1vMp~^j<)L2D3GZa0Io4uaXO;{4H1D&h&_baqQe??zLtp- z-pJK3rr{LddXxB@)Za)NO?Ja%rm{duM6hVlRvR~+DH_~ZE4B-k*@Ir%(4_!I-3PIO z+B;s3AR-x_3MnNnMIq-=HpnWG6>6@7BwH0_73%Ayt!CPGgTO13hbX@~?&Cavut3yW z>z#}Wy_A!t>QXXAQ0ujY3?a%tR9bG=E0ldd=$6|`-0y)LLyM|#Ne`%5%mEY)8}uR( z`C6o-)$;@9A3QAV^rLs?MPc3-SMtfgqC}qmX1sw>KdV}MLIEBP;@;E-6m2QaLUk1x zYZXptnV})K>xR>+xRVnZp?hQEUt;Fa?F}z3^_EyQ9FKsOM7Mw$x&=n%w`JSO#@n#K zp1ubX_Ek-2w{Cf(rf!E0yxEU*Jghr6<{NchoS(m-3{&BYi;EZ3W_O(Mpu4=H-}r`C zn5PQ9DRVg!Rare>qnT9-(aT2kd5FhdrboL0oldH z5i(V4wZpWF;0yb<1NagezJl73S?|3nM=5F!MUyFhW`^J+#_}5PQ#?yw(WPkcN-aBf zeold8btOymwK;J^7Z-BMkVQwEg~@smk!$-*HytApksnpx-aQzPqxagqX{WbXCL1Wjc#u3fv<_300vR zC&M&NV2)^nTBmysrNeX*PVp*#NnZP9`_mv(qs;Rj0Cwf%2+}Vgr&WTxAX|@r7d%q(#gi!Qeteukk8zVc0xBtg1|awme3@! zvmrta8#7d3lO}cpvVP;{2n=i(P!57Y&;3WE;l~7;3;x59PRDR>oKiX(&TK@F07?+i zv>(x)$+EKxYc-XV?$u-NW> zJdCCz>?a5n*dGC&%*KaK)OY+=SQ-w~8S-Ts4Wlu*o9Qr3hS4aE;Xr)ig2szu$eK+7 zPKVQYG_l|V7arWx&*%TU0(&m)rJ;2`Ri$uY+{RR=csQBNo^$2xk?22C0;5o-=&>4j zyB{$JVei|lueCNpW}z-LUJdj?Q5>17p%UBM*vyXNNzWlt)zs8MwXxO1kxL2-R1~)Q z>}~eQU8!=SRE4w3c;&EH7eIH9gSF*7m3>9lci`bIR}t0vpd|V*xwbd(*Osq@*|O+l zzIYU0NzjX35r?>kK2-9a{ot?{9jh!`;vS*{+=Yyzc0yAaiheWaOgDufy5r03B(os z9xye*9pN%21ze4vy0JiZR*l8V_H-NL9tg|WOiJF;BaF?QWLb}-5jAHlEujapngZ)B zEn#BH3$U03EOWUuS~$WU1gyP*xAX|jO)c-p3C6!V%((Z&2y=E}U3}1|j<(2&YWYd% zyn_0JzKQOOVPGN~aWb9FuuphN$@i*yYMXZ%Ha%Fv@Gn65RD0%` P1~JV34HB$AzGwdfuQ9sV literal 0 HcmV?d00001 diff --git a/test/render/fixtures/401pseudo-state-fork-explicit.ps b/test/render/fixtures/401pseudo-state-fork-explicit.ps new file mode 100644 index 0000000000000000000000000000000000000000..c922a09063d5e0c7e8e51202a08ed9392dae0df6 GIT binary patch literal 7285 zcmcIpS#R4&5`I?yirNPw4zT7W>Iw`4lWR7>05QhFzIcp)CfgDdiqw#lY>nXmzF+l0 zwqz@rAhSjsRaaM6RoC6}$-geI&VI?NTX{D00&#Nkrj|)t)vst?C#%IK|BE)VZt|+6 z$cqCnq|+z}$6*wWykHo_FLC5k-WKu|HEq&LYU`wI@)idgY+WXE*}S4t?35YPzOL3~ zmY4I_)q{(ES7vXjVk|H>4%qG&Xxq^^^#Vn7GGfe;_AK57njivk=P(OiOU zE9*^C&}!Ym!jc*O@reAzcD0ZtQwecGSF)w`ioll?V+tuSTGu)J zdU#`lKPuerKP%eZJR&$PWKy>mkkt4k)x}+N|7dgat9O$Kdq`d zJ7f2q-6hMs*wUW=l+*BEvMxaIO)AAnh3ZqDT@+8LNs~f_i&oSBP;Ram^&V+~EDb$m zIY$aq{j6yFq~H_?Nj{{U0vkF!syF&jRj2oD0`F`K*?@ah=~BUTC(c1|gZe@((Kt4wNm$9s$BR z!Cdvi!C=tm74EOGBV6W_5B;t$b+Fy;Lf+73FOM1FX=B;eHiz z!bcOBmoih7J6z*LZ>Xa%pTc)ZJ@9p)_6TbsjSsBh25wHXbrc_MYE8<{b(l5lTdi%^ zUN^9=I)x%o-Ghg+Om8W3Q~$PlSk?Iwv7oenNGmkEnzrWip~?S}wB`T7BSy+$q$vP) zo{JFYt1U3ja8{h0(ix>RF2?SHX*Ai5;7k?1l89i@qOCUFbf#!KNLs0+)1}d7;fcXax3p@Sjm3dK^_r(=I8AKTK`6uHIjQUyC+7t5eXsGT@Z9vgxaTcqq z$VjVjLdygVxmnkeR@og-WQ6XGiGPWiL$^1)xYS!>RZBbq8mig_%+M|{D!+|b1ZPZ?Zvv{?k#i;%juFLcu}a^i@>cu2Mlq$s;~>=MwBS(zCY zRl8De#g6naDaV1ns}5EnI# zAa^`b+b)a@RRha(+8>|AARB3VhC{>J(z-Z?Bg5N;UE0X-?qm#O>U02XXm*oc z651IN;;}Hp1s3DjE$KDLzi77DjMnl-( zz+?JCPdQHlZxrC7xjpk3oJYqQV&`8 z$1{5j-yovsG94g$*pfLYfRSP7fDU0~SX$P@Q70FmCA6vlWrgj7me450n`Bu7GAdZA z9)pI~nZiOnmEmSSTv|)>w1lNU=HW0v%W=I+r|C~Pb{1F@# zD1i1N4rn<7Wo~SFhn)`ie%ti;r_R1PyRaF3P^^xX$Z_n2vr(jqe2h|QOJv|p#{pXP z%$o!ge8%2vf&x8?yeN()6i>YwPi1lJjpET0m5xc{u8T>D;?SE7L)%qE43|#ey5Shy zhqn5nT~9FwPz>zR_IYqkx6JgV(w3QjRQ!*XQ&QN($$=SH3ar&EY9 zJ~u7*XL{>DD*ng(I7L7ByM8p^ya@Xhi!)iO7uF{{lK3gAUeV^sg+-5M9R9k;udr{t Pz#vB0uNT4U<9qQxT(PsA literal 0 HcmV?d00001 diff --git a/test/render/fixtures/401pseudo-state-fork.ps b/test/render/fixtures/401pseudo-state-fork.ps new file mode 100644 index 0000000000000000000000000000000000000000..c922a09063d5e0c7e8e51202a08ed9392dae0df6 GIT binary patch literal 7285 zcmcIpS#R4&5`I?yirNPw4zT7W>Iw`4lWR7>05QhFzIcp)CfgDdiqw#lY>nXmzF+l0 zwqz@rAhSjsRaaM6RoC6}$-geI&VI?NTX{D00&#Nkrj|)t)vst?C#%IK|BE)VZt|+6 z$cqCnq|+z}$6*wWykHo_FLC5k-WKu|HEq&LYU`wI@)idgY+WXE*}S4t?35YPzOL3~ zmY4I_)q{(ES7vXjVk|H>4%qG&Xxq^^^#Vn7GGfe;_AK57njivk=P(OiOU zE9*^C&}!Ym!jc*O@reAzcD0ZtQwecGSF)w`ioll?V+tuSTGu)J zdU#`lKPuerKP%eZJR&$PWKy>mkkt4k)x}+N|7dgat9O$Kdq`d zJ7f2q-6hMs*wUW=l+*BEvMxaIO)AAnh3ZqDT@+8LNs~f_i&oSBP;Ram^&V+~EDb$m zIY$aq{j6yFq~H_?Nj{{U0vkF!syF&jRj2oD0`F`K*?@ah=~BUTC(c1|gZe@((Kt4wNm$9s$BR z!Cdvi!C=tm74EOGBV6W_5B;t$b+Fy;Lf+73FOM1FX=B;eHiz z!bcOBmoih7J6z*LZ>Xa%pTc)ZJ@9p)_6TbsjSsBh25wHXbrc_MYE8<{b(l5lTdi%^ zUN^9=I)x%o-Ghg+Om8W3Q~$PlSk?Iwv7oenNGmkEnzrWip~?S}wB`T7BSy+$q$vP) zo{JFYt1U3ja8{h0(ix>RF2?SHX*Ai5;7k?1l89i@qOCUFbf#!KNLs0+)1}d7;fcXax3p@Sjm3dK^_r(=I8AKTK`6uHIjQUyC+7t5eXsGT@Z9vgxaTcqq z$VjVjLdygVxmnkeR@og-WQ6XGiGPWiL$^1)xYS!>RZBbq8mig_%+M|{D!+|b1ZPZ?Zvv{?k#i;%juFLcu}a^i@>cu2Mlq$s;~>=MwBS(zCY zRl8De#g6naDaV1ns}5EnI# zAa^`b+b)a@RRha(+8>|AARB3VhC{>J(z-Z?Bg5N;UE0X-?qm#O>U02XXm*oc z651IN;;}Hp1s3DjE$KDLzi77DjMnl-( zz+?JCPdQHlZxrC7xjpk3oJYqQV&`8 z$1{5j-yovsG94g$*pfLYfRSP7fDU0~SX$P@Q70FmCA6vlWrgj7me450n`Bu7GAdZA z9)pI~nZiOnmEmSSTv|)>w1lNU=HW0v%W=I+r|C~Pb{1F@# zD1i1N4rn<7Wo~SFhn)`ie%ti;r_R1PyRaF3P^^xX$Z_n2vr(jqe2h|QOJv|p#{pXP z%$o!ge8%2vf&x8?yeN()6i>YwPi1lJjpET0m5xc{u8T>D;?SE7L)%qE43|#ey5Shy zhqn5nT~9FwPz>zR_IYqkx6JgV(w3QjRQ!*XQ&QN($$=SH3ar&EY9 zJ~u7*XL{>DD*ng(I7L7ByM8p^ya@Xhi!)iO7uF{{lK3gAUeV^sg+-5M9R9k;udr{t Pz#vB0uNT4U<9qQxT(PsA literal 0 HcmV?d00001 diff --git a/test/render/fixtures/402pseudo-state-junction-explicit.ps b/test/render/fixtures/402pseudo-state-junction-explicit.ps new file mode 100644 index 0000000000000000000000000000000000000000..94a62f97fc739089496f68fc84b230f65485c856 GIT binary patch literal 8149 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 V0Kez?!aE*_3G4?9uzLM6_#cH7-);Z^ literal 0 HcmV?d00001 diff --git a/test/render/fixtures/403pseudo-state-terminate.ps b/test/render/fixtures/403pseudo-state-terminate.ps new file mode 100644 index 0000000000000000000000000000000000000000..f7e2af0ad4f59ae3add67c3bf364ffd2d28b4c56 GIT binary patch literal 5247 zcmcIoS#RSw5`GqcMeRe-39zvaA8{H%fazoB02>MM`Sy$B;87Ie(3oZlY#U`( zvY=|&t%WCR`H#jF&NtOul}shX3EirOmKA|7S;iDoI+sSKU`DFd4!Sqel&WE}t)TWN z!$JOg%**Uim$)@Hg(_#w+*!fh+>>v?8~Ywqf*Yb z{!w!|Vx>@FXOyD&8xmouGv(G>#?9*ox9h8>vf1C#*p~Kpj7nX#B)(|kyC+G6w(3^s zY_ttdD5vjK@~##^=oW2wA_{}>dw-MnH}Dh50PJOX?tWfw}{D3pse?4Hxutnyq8`I8!@Pc5aVZy?k)mcI|Zq>)KN&0{RI& ztYvnVYHu1o=yhfC1!BQ!zfLupouN(py{_}W6m9quJVr=4j5Gz7o#zt7d9?w=-YO!) z32A*Axp3J5TuRTN*$$Q#x>j5g_PwTxBCl%ojWHZcq1p6<&#e2qJyajFkciGTwf)}h z5T>pMiC|3|H}Dl0@I(Nnkm5?Njm{XF4kr;tt`xzdnwG&{Her5nxn!f&E_?Wpjo;$E z#S6Jn#^z|P{uIF-V#b2ndI8`PgO#Fl%FqxI*o4?an9UokVdpzeoamlcgMrZY=}8#~3e;XIh=u@U%#l zxX>BTqau)nmYJRFAjwxnu0p$d>8qKuT@d!lQNP(*dqN=|4f?6A4Jg_y&O==l89NnDXd%&%>!ndt zWsf|O5xO@f{sm?Z*WU2rvTupXC_Dmc(#;%ZXyzD|Kjd}8jn|0KpMC-o_O(rDyR4P5 zQ+J0Bd$S+8cvv>wnBS`N=IZJVNlb-ruCL!vEgu!(L3eXYzp0ffFi&M_m8U!t6|$Ty z(aZ{q*vUrp^$^e7xD%03!Oe=F2Ay`NS663fKqZ~txo@x70onES5i(nAox_}q;0yn@ z1Na6SzJ=OxyWV?M4kxHN=&TXN6MoS$@fVEcCEllamcFGMZSYFX8*z0-A!Bd3MBlY1 z?&U3?l?Oxo&@}cFNDnd^Lg?gzk-a5y(~c^m z%kC)N)l+E0v{+uYJUw9#gk>DHT>I-DX&kkDJ^wf!cj9^NX}wAe^GYACJ#DL;MMHyD z0^I7A@q|54++Ae1+L8JDwwz%iuLG8z408&mdeIGKC)6BqdlJ3w_INNI#*|FG&*LGC z4xj&L-{=2p6ivV`K@{zRi204cu-RwWQ(2y0d#!C2bkB@7sJc!hd{9B%i%V8~}A`fI9Z>U1=S#L>}*O36l7mo%?rxmag^(^^$^rVAPl z#?c_A<6#s};^FXY5RIbo366Zrnp|B{-N;5!Q^}&v8XTyBx{-5LU(zu!Mas1A^{Pm- zV*XxleDJ3t{h*giRW!Az5#6eWRwaQi8O9V-vXGTbz>HL@9dvJGRj7u^c7ocU z6bJe5AuG}cUEtQ(GABoc)i=*YHy!pB?Qmr(b7z_SZ_iLGhyOo&lp@WAZ_-stkTTym1SE zRk*{yDB4H9A~?yFtQr^_A^$`(1cC8_%c9>^4aE}VXj$n5Y0@WmM3D#+t*i8u-FNyR zms!50J^vY};X|%+5WGocIGIp=&a;c+DbDWX+|g;mHvr5KY%XuBkefn zeYk(K8RyrIhJ5WDsr#6vs3|@LOEVYnfve(0aK%Oa8F8A)xh`Z5-S;>*vQ*U}H7eyo z>z_53BUTC(c1{V3e?=lJbgJxn$GAm3vpZikmCpZ>#U)-<~89nyOo( zv(YX%qKtk}!Mj=npWx0&DJq|tf?(2JJ(}YuVz-;uDz~dU2_UWKtFlY`F9Qo6>V=*29uq*NRKRzSmTqXJxIvGlpX+thRpeRU3b|hw?E?iRj!=+wbiT zVQOoT2sX5}17D5-PXu5JDYoRA=!~K1XcA%MN)RlnX&LNg6Xpk-OD0;)(!+;r{1)#l zp3AMOOpey-FA>}!W(=sU7XYp>SSdQC6b%u9O^7{&*`mQ3cE01piSBtd7}8*hU%MIm zn~A?+8cTLBI8#MvBqCU>Xs1m#of#V3*ebRQmvUp5E_5k`QTIV2F#C>IM-UT-r$MsB zrA~Ps6@kpPOwC*eNv&-M5qg^^^T*$E_u>4U5Zl# zwcc8&B}Dm$O3Ur4MA`R)Zn@3%;~uDE=ukN>=>aW^Ie@wnK`#=KZ$);rc7DM8gNKEi ze(bJ&QMB)iTYfT#c+BUYjW;mrcT;PRD8!>dKen|2MVrMrsI4MrR)r&4N;KqpRVgad z2cF0X-5V4C5;KQwZ+LN;w?tVfJOXOc%>rg<78sR3W_81jw-TW{{RkxNYnsq*RjbNO z-5omgWQJ++4c1+WTw_yhglcF7w&Bb z@C`J)gxYbt-g{M!Ca5_y91STR4_kt-7|RR1Pw_0hq#Iq~m6|o;>WV^Ub;~9Cu03&2 z*VjB{aM7`55nL}~>e{}rO~=ZKFDB^X6LM`JLD_XPwf`7T>6_D49QD!L%Q-Ax@4ZLP-3nWk=9 zFza|S1;l00YL)hMfLsV+S^#_L=@gHTsz#VeBH_-rs5UJPjz^`hd@U^I>=kaZyJz?J5C z(q5{U)Aqpm=nSOHR%i?XP>oLyPu!JiegeuqEg9)S`OY9>%nzi=Ni4 zecCZDZCH<68E41?rw`U0tq1FLXIghPpEhEr;XZ&}oRJfO<)H>12upVtZ|TG{$lcm; zXKOj>SUb`-!2D>KwfXlyMgp$-Mj*`gqwfC-1b4$e4m`-2a}^BNFWt2!&Qa&ch0Ykf zJcs}fgr&2%w{#ouK^QQ-L!hrRbj-zuCu(+XPj-}JW5qcmj9Vc(;5jv*s z+oQtL5gvNIom7PzNxkY|I?^{Z6>i;T>S$XOHa(bO_-`n8tv5Or#0d8s1FNr}#eV@o CZoL!$ literal 0 HcmV?d00001 diff --git a/test/render/fixtures/501hierarchic-states-with-transitions.ps b/test/render/fixtures/501hierarchic-states-with-transitions.ps new file mode 100644 index 0000000000000000000000000000000000000000..63294fefea1208a55a2ce4492c0fbed16de17cbb GIT binary patch literal 5979 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 literal 0 HcmV?d00001 diff --git a/test/render/fixtures/510hierarchical-one-initial-state.ps b/test/render/fixtures/510hierarchical-one-initial-state.ps new file mode 100644 index 0000000000000000000000000000000000000000..50bad18f7b5d0e30fdc0a7dc394587d22d277e46 GIT binary patch literal 4711 zcma)AZExE)5dJLwirWXH39wj_W4lQZ1X$m;0s|T>#lECL!AP{NmKHTia_k!U?|Y7v zWZ6l&1+gXG9q*3!P7i*$zB&0VHTUY|bQp=j;H_1%GWLSzRu+p@_JdZ+mYKd$5Ijgj~pt6#cqRPs=%qnasfx4D+RbJ2$FnP+fZ%m!1Sw4Sb z)_w5%Jbi1HOO;opDCJ5qrJ85?wKdwzMflEC@3N$#Q4~?iFR7Y|7I@E;LWHHN>f%pX zWqC|nv6S|^2;b+4VR?V61gE0WWJ=Onxp55W02>MM@#d4~(4r{9rU}gz*jCD}q^6?o z-bG8+@E=boTx^Pk%9%=t0o|yI>Vm+R9Ak;?Y?){G2USdGeQ8%A5nEJsUG=a33qFv*ZQj z8>7>opkCPfhtezfDUnaMc9@e-_d5HhRzIP5R`!koqhDh3*3>qGUk^{*z+V*J;-3}W zN4_99(MsA1#zx3L(mjH}d7;gszf=ju669!MO@cJpC3i%T2oqy$dcy8InaO3QH?-$J z=QMoDT7%%HRF0Di)u%kWC_bYyk=lieS2O&WuWlIh0cn9Ojfco`jufc+)zR*ff>R(S zwN5w%R&==4BX*(ccJJE+-q~nXg1gaKiX6GULy|*OD$51+%oj31If`>SP;psnmyIuO zHC5%e#?Nh?J_CG-RhF-^lD6S2)0(!qdMISIaA`&;8`gYBo*zIL=7F}H^L=>#WcQq3 zTN?4PHB$E>OHot$6fDghpbxC`XTg?>`V-$)3-cCnc-WFOPn0;NK45UyeP31zA-h^OOj;Tq;zCvZ{mu3bbOl--VnA(FEqXN*(1E#~65o+Y0kJ zc$d^c=mT{JXf5R7QERxMpVMp|$H$x6ld^Mr%*y)SYumNg6|C!ap$M1<@NkydS*kf{ zcyHE)&6bD-r~NuHXm*x1&2wF5KNM~F8$8BHIgB(Kubt;ci1T6th&xq8mJ`zXH1grH z1NfAlL$e($(WX>f6862Ow9blBePs;CQfN2*;Ir%gY7f=NEG43IO-;Y|D}<@9K_Xbw z#t(cN1D*)L6jFT2boGnS1;RY=4}^*y)t=->Q~2oT+bgOG`ZJ$%TeK9dD3)UicU3fX0eoClZnGMRv4)e!%>Li$y#A_*HYG zXzmv`d}R>vnD;*!Z(!7~uGS7H#HGPJG_?Umo5i(IUqvQfg#j%k8gf}%MMXN}iHy*_ zG4U@kbNKd#8<)FF6jtF9P?D(@FhjM#sQfM~D{j12gzfGJAYotEgtm35ted(!bl98y z$j3unbz^>`&a2DIS0phNzPh@4MWvi6!iDbohW=D5r7=&XYLz8C6KR>xYcwOn8+Rf`q`6t~)u7Yv=<@Oy4JfChTmNhoJ0QEddV$Q}VITXJ>qd0!u5PZT|p5uOsYv~1D8;e_NR*B0?3Ypanm+0GO#~oc=@sz6 zSvxzp_ZT_A2IFsJksB&vj~T(3V~X*>dWUmMhE7f$5|2J|at>%j(}`n>M~4J6EIrPD zcPNKBBkaZ3j-Okcd8KOFraC&||qN77IA5(8$5#7`@phH5qD$DURh}4Z|T+gAdG7J0=F^Y#1nlzuie$7+1 zIPj&PyqjbFPd<$)Iz5|SE83>oJAuoo&qxa{KCW&yNruG^%rN|(!+H0UoP!wA4wPW^ H>4W$eIX?Jb literal 0 HcmV?d00001 diff --git a/test/render/fixtures/511hierarchical-with-initial-state-pointing-somehwhere.ps b/test/render/fixtures/511hierarchical-with-initial-state-pointing-somehwhere.ps new file mode 100644 index 0000000000000000000000000000000000000000..760ac2be6b109a28ac31085e4a75d659c4d72862 GIT binary patch literal 5692 zcmcIoTTkQ25`K37irNP>ARXdME+iv_v~xRWq?HCOqkUn~$kziBO-wonx% zgHbey=`@MrNt`6(K{Sj;XE^e;=t}vP+Ai%Rbxm5eMTY||P}k{Pwr}Yam?~%5cWPDT zMKyn?Ha_@cmA_ZZrL4MEwCP$hrJNVlb)!l(7vTrheJHYyk|?5_7rA^84tUR$LWHgC zR`qXbS5z_W#4>Gui11^TDVFz#%y278#uG}LCf#ZVbcBtB_$a9bc24c2uic|28b?5PpLE~9jecH_E9{gHcLw#E=JApbG5!<&?lq?vNRqb%Q;e@ z>NichPYO(u(+dCvVMCEC_AkTau1Ei*y z(UFSFRjIS_)uXEG%+dIzqmvhaudynsbDj8HZj^#gf+1YM{{ z+HubNaQ|laoL@Ui_}V2>_p!)PQ+x`RrZ3@F=aixNHzdMJ<s}ZH z!9K5We_dw*MDEg3q2ei!2B&|Xo>9x5FPJA~>(*>f|7GFdkKliv83YSzWQ)v`BH#{j zkS{t3bxK2{K8HEaM6l0ern$Mq zRuMIvklLq_370*3(uis;;s z?e}JfFf}zu1RL6#fv?1XCju~q6jO3_bjHwhIEgTFWe678Sq2B$g!#ebl8#or^zb1Y z-{PIc%XBLnoujS%O9Z!w84a@a0>BjpD@o^+qah-&39*MTTXa~%&bOR6(H*Y_2@R(B zHJg#YnfM!~F=TgwGgX9IB7((;cG~pQnWn*wjbgiSnQqL|g)W6K>LEx3df)Tv31Z^# z)JT@NR5{P1B1lV>=6bG!Bv%!=3hnEqt7gV_LFkpqW0YSV4{@G9M5rpG^^T*$EP2w@ zU5Zl#wcc3B5~BP=rR8>2qwM=Zx7?QM@c`5_bf^-S^nixN96;5GU@sDpZ$$RAW`4l@ zgNKEie$39kDD3;5XV&*XI4KFVJmZ%$vM?g!eTfhw60;BSWqV2fxHX?MVAAy8@bragH zTG{BSyGMuK>_;XZR$V{lTXo)CUcR9eQ{kJdt2fl950dbpyS|~{e%SQBhh^JlLi%6*CX2nl~Uc1xF%QG~ficW9Mw^Qth?CRTsgdnxiT5 zQ(l)9VM{k2(lm9$gI>o-0$5CcB8~J^5gSYbYmO+!7xsIc-ZC^Ejy0CQeRMp+{c$87 zU1-Mq-Q$@f_7-iwdaOZ0AF#lu$Jp$q<^rBROv}F(<2a$^V?cgxhd80If759n=}eDj zgULAJ%TCc6OpB)3XfT=05;{G$`5AfBi|A*l6FMe@---(V6iG|#Cf$LkuhU`zk);(G~Rj>)8!lgbpWzA%2j^E>1njEFMfI6NJ?Tc}wT?*+qX8R;47d#Jrvwlq1!6 z3*+?=0iYRsYoB&BHs_s)aoj6_rK5B@0pyfETslISPm2RK8IxmjYqf=h#2D8HiD@kF7AA=^2z*@GE| Vf6{U@{YfK*7~x)tVD;sb_%DOM2Xp`c literal 0 HcmV?d00001 diff --git a/test/render/fixtures/512hierarchical-with-initial-state-pointing-somehwhere-with-an-event.ps b/test/render/fixtures/512hierarchical-with-initial-state-pointing-somehwhere-with-an-event.ps new file mode 100644 index 0000000000000000000000000000000000000000..42aed7988fe917cf1c9c65d9e7263a3855e08cad GIT binary patch literal 5738 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 NBkY?JtiF5_{{@1_6dM2l literal 0 HcmV?d00001 diff --git a/test/render/fixtures/513hierarchical-with-initial-state-pointing-somehwhere-with-a-condition.ps b/test/render/fixtures/513hierarchical-with-initial-state-pointing-somehwhere-with-a-condition.ps new file mode 100644 index 0000000000000000000000000000000000000000..335328eb647713ba7a70c8528d5fab685d9744fb GIT binary patch literal 5700 zcmcIoTTkQ25`K37irNP>ARXdME+iv_v~xRWq?HCOqkUn~$kziBO-wonx% zgHbey=`@MrNt`6(K{Sj;XE^e;=t}vP+Ai%Rbxm5eMTY||P}k{Pwr}Yam?~%5cWPDT zMKyn?Ha_@cmA_ZZrL4MEwCP$hrJNVlb)!l(7vTrheJHYyk|?5_7rA^84tUR$LWHgC zR`qXbS5z_W#4>Gui11^TDVFz#%y278#uG}LCf#ZVbcBtB_$a9bc24c2uic|28b?5PpLE~9jecH_E9{gHcLw#E=JApbG5!<&?lq?vNRqb%Q;e@ z>NichPYO(u(+dCvVMCEC_AkTau1Ei*y z(UFSFRjIS_)uXEG%+dIzqmvhaudynsbDj8HZj^#gf+1YM{{ z+HubNaQ|laoL@Ui_}V2>_p!)PQ+x`RrZ3@F=aixNHzdMJ<s}ZH z!9K5We_dw*MDEg3q2ei!2B&|Xo>9x5FPJA~>(*>f|7GFdkKliv83YSzWQ)v`BH#{j zkS{t3bxK2{K8HEaM6l0ern$Mq zRuMIvklLq_370*3(uis;;s z?e}JfFf}zu1RL6#fv?1XCju~q6jO3_bjHwhIEgTFWe678Sq2B$g!#ebl8#or^zb1Y z-{PIc%XBLnoujS%O9Z!w84a@a0>BjpD@o^+qah-&39*MTTXa~%&bOR6(H*Y_2@R(B zHJg#YnfM!~F=TgwGgX9IB7((;cG~pQnWn*wjbgiSnQqL|g)W6K>LEx3df)Tv31Z^# z)JT@NR5{P1B1lV>=6bG!Bv%!=3hnEqt7gV_LFkpqW0YSV4{@G9M5rpG^^T*$EP2w@ zU5Zl#wcc3B5~BP=rR8>2qwM=Zx7?QM@c`5_bf^-S^nixN96;5GU@sDpZ$$RAW`4l@ zgNKEie$39kDD3;5XV&*XI4KFVJmZ%$vM?g!eTfhw60;BSWqV2fxHX?MVAAy8@bragH zTG{BSyGMuK>_;XZR$V{lTXo)CUcR9eQ{kJdt2fl950dbpyS|~{e%SQBhh^JlLi%6*CX2nl~Uc1xF%QG~ficW9Mw^Qth?CRTsgdnxiT5 zQ(l)9VM{k2(lm9$gI>o-0$5CcB8~J^5gSYbYmO+!7xsIc-ZC^Ejy0CQeRMp+{c$87 zU1-Mq-Q$@f_7-iwdaOZ0AF#lu$Jp$q<^rBROv}F(<2a$^V?cgxhd80If759n=}eDj zgULAJ%TCc6OpB)3XfT=05;{G$`5AfBi|A*l6FMe@---(V6iG|#Cf$LkuhU`zk);(G~Rj>)8!lgbpWzA%2j^E>1njEFMfI6NJ?Tc}wT?*+qX8R;47d#Jrvwlq1!6 z3*+?=0iYRsYoB&BHs_s)aoj6_rK5B@0pyfETslISPm2RK8Ixm@=5#`$2$q^ literal 0 HcmV?d00001 diff --git a/test/render/fixtures/514hierarchical-with-initial-state-pointing-somehwhere-with-an-action.ps b/test/render/fixtures/514hierarchical-with-initial-state-pointing-somehwhere-with-an-action.ps new file mode 100644 index 0000000000000000000000000000000000000000..31a0aeb5b828454b1217ed9454dc1874bca27388 GIT binary patch literal 5754 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 QS}4Q_|2_n(&mYBq0KIkqzW@LL literal 0 HcmV?d00001 diff --git a/test/render/fixtures/516hierarchical-issue-15.ps b/test/render/fixtures/516hierarchical-issue-15.ps new file mode 100644 index 0000000000000000000000000000000000000000..ba9107ea9b043c93261d04363b21d36b00d6a122 GIT binary patch literal 12762 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 N(ZAt@sE_ZR{{jineV_mU literal 0 HcmV?d00001 diff --git a/test/render/fixtures/517hierarchical-issue-27-hierarchical-self-transition.ps b/test/render/fixtures/517hierarchical-issue-27-hierarchical-self-transition.ps new file mode 100644 index 0000000000000000000000000000000000000000..dc7db5d869d937922d72b29ce69f4587f5d69919 GIT binary patch literal 6202 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 literal 0 HcmV?d00001 diff --git a/test/render/fixtures/517hierarchical-issue-27-hierarchical-self-transitions.ps b/test/render/fixtures/517hierarchical-issue-27-hierarchical-self-transitions.ps new file mode 100644 index 0000000000000000000000000000000000000000..3efe23632976ac810556f2de11bc603c7af851ad GIT binary patch literal 7646 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 DHeE#R literal 0 HcmV?d00001 diff --git a/test/render/fixtures/518hierarchical-inner-outer-transitions.ps b/test/render/fixtures/518hierarchical-inner-outer-transitions.ps new file mode 100644 index 0000000000000000000000000000000000000000..dbc5de9eaab5f746828625d284608c3ddb056228 GIT binary patch literal 7573 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 C*)N~~ literal 0 HcmV?d00001 diff --git a/test/render/fixtures/519hierarchical-nested-self-transition.ps b/test/render/fixtures/519hierarchical-nested-self-transition.ps new file mode 100644 index 0000000000000000000000000000000000000000..0f757caef333ecdd41c21292693f17ba7a745968 GIT binary patch literal 8953 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 Np8bjotlqux{sX$asn7rb literal 0 HcmV?d00001 diff --git a/test/render/fixtures/600kitchensink.ps b/test/render/fixtures/600kitchensink.ps new file mode 100644 index 0000000000000000000000000000000000000000..824160d1f168752745ea0a059aa2f6846062a689 GIT binary patch literal 14611 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 ZH2m8``bPAg??W+-Xa4a6hI;dh_kToKwABCr literal 0 HcmV?d00001 diff --git a/test/render/fixtures/601kitchensink-with-notes.ps b/test/render/fixtures/601kitchensink-with-notes.ps new file mode 100644 index 0000000000000000000000000000000000000000..868b6e05a06c9bff71a00fe1bc42275fe35823c6 GIT binary patch literal 13090 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 literal 0 HcmV?d00001 diff --git a/test/render/fixtures/701-parallel-states-only.ps b/test/render/fixtures/701-parallel-states-only.ps new file mode 100644 index 0000000000000000000000000000000000000000..7d19ea53b8b5dc61e157198f751afcbf07d4b503 GIT binary patch literal 5557 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 me8GEyUv28aXUY6AOB97KKo82lH?KT{n5 literal 0 HcmV?d00001 diff --git a/test/render/fixtures/704-parallel-states-and-transitions-typical-use.ps b/test/render/fixtures/704-parallel-states-and-transitions-typical-use.ps new file mode 100644 index 0000000000000000000000000000000000000000..1a7f629edbaebc2d0207ef7aaf28b28205872781 GIT binary patch literal 8167 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 N%wHw3)cc>k{{s=n^}zrD literal 0 HcmV?d00001 diff --git a/test/render/fixtures/706-parallel-states-and-transitions-from-external-typical-use.ps b/test/render/fixtures/706-parallel-states-and-transitions-from-external-typical-use.ps new file mode 100644 index 0000000000000000000000000000000000000000..63e61d69532fdcf91a42f25efde3764929f45dc9 GIT binary patch literal 9443 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 DMO}O( literal 0 HcmV?d00001 diff --git a/test/render/fixtures/801-labels-one-state-composite-with-activities.ps b/test/render/fixtures/801-labels-one-state-composite-with-activities.ps new file mode 100644 index 0000000000000000000000000000000000000000..9a059214d62267455789c6428961b789757550cc GIT binary patch literal 9262 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 Lj;!GH^|SadAiowH literal 0 HcmV?d00001 diff --git a/test/render/fixtures/801-labels-one-state.ps b/test/render/fixtures/801-labels-one-state.ps new file mode 100644 index 0000000000000000000000000000000000000000..9de73b35bcee8b548a33dc12a9c6423cfb42bb15 GIT binary patch literal 4629 zcmai2ZExE+68Pl2{t(a0Rvf|F@TrWiULDwI$q^5BcQOb){&4mX(F{Kb;rRt{q zUDjC<(@w0U`60rOMWR{W|5Soo(fDFU(ipk54CnwG3Gw;S2Z;yfiGFc6jQR4MkZiJs?`p<*U}WKX0n~2_9w+b z{+nk-I@bkmjZLnKMZI)Za5wklJMadj+EDoE^9L#v?f9DXvZGR$_V0zVxymcmiFl#8 zHZspUKxeT-o^Ogql`A$)kV zC(f@OjrrO+QujGaQB#H#EX`hE2yBX1!G??aPsC{^7rKx+bl>A#%Tk#`YE;Ul);}sP zN30Yo?1B;$e?uZHbgJBX$GBznoLzQ6u7mU}1Y<5CnZ*;r_PH z0*KtDl}5$WAPr9cJUyd|J)bd8O4gOzp8mUqe?Nf#dFBu-$fydLr$oRVVlQ88655o8 zMqLhbo{6B(W3QGg|L|sNIXvJ{94LK2_2`mbgTFM=+apDm6 zD9mT!T~Y_33)CLqE#%;lH(W5xX||5#<4o;H*|`H|RrBPu?b_=a*0rZl1oSg_Sj+U5 zYHu1o=}l>}6=K0^zezNjouO^}y{WRl6>a$wJf=uFj5Ilxo#)1g^KuJ_y;Vep6Vm!L za^cbgTuLvXSr1EcT`4XJ`(9Ido|TpQ#u$#J&}@gnXEwv#9%_hLNkr#{+J5hL2vb*s zM6jW)8~Abzcp?B(NO2|CMrRC7C$k76SAt+sb<1Ecn=n7PT(Z$>mjisr#&7Z7;rZY=}8#~2z;Yx1Y(uXdEFzP-?1a{x?>Ih=u@U%#lxY8-l zqau*GmZ_cVAjwxnu0nmi^wrGSE(ix@@(?wwj{CTQKSZbtr}d7b!Yz5yv|Wl*1hw8- zs3k=Chf1q$Q=;q-gKo9W_46L6W9U&iE;#@?77GBi5kW5!k?%xyv~GUD{DX&upMKn~ zeNnXUi+g@Dh6|Ar zLifhRzrxJn+8bV6_AOBwg-1X|x?aKz^%A4ndKJI z%SQAK5HGv96EUWon-xC|I_*wxZqCqv3Oapo-(Il;vfJAuWVY5ihdCF)7yfMr@EtU~ zhT3tv-g{L}W~ez7PcG<^AGA#S1ygx}=P6#L*L0^19;sO^Zf+=K>^)cL2Y29+Zf|+U z;F9BvBDh+_)HQwKT8@))bw$%D`4*6%6i-p`1 zS!30z;Hi2DT;7?&uX?JMTl+Pn^)#4IFwKi@7;9Uj@IA1{xUl|;Fy>le%Uqii*z{nA V;omQuCdX3*QiLD>!0F2;@qhl$&+`BP literal 0 HcmV?d00001 diff --git a/test/render/fixtures/802-colors-toverbal.ps b/test/render/fixtures/802-colors-toverbal.ps new file mode 100644 index 0000000000000000000000000000000000000000..b21b9aa34bc7e400f548c82753e4f51edf3d9539 GIT binary patch literal 11677 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 Y_!YFgt$yZBHEcZhGc1<+^=I#Y0jKnJD*ylh literal 0 HcmV?d00001 diff --git a/test/render/fixtures/803active-and-inactive.ps b/test/render/fixtures/803active-and-inactive.ps new file mode 100644 index 0000000000000000000000000000000000000000..266ec7703b943a73dfe4434194c14989f04e261e GIT binary patch literal 14385 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 literal 0 HcmV?d00001 diff --git a/test/render/vector/dot-to-svg-native.spec.js b/test/render/vector/dot-to-svg-native.spec.js deleted file mode 100644 index dbc3d95d..00000000 --- a/test/render/vector/dot-to-svg-native.spec.js +++ /dev/null @@ -1,45 +0,0 @@ -const chai = require("chai"); -const dotToSVG = require("../../../src/render/vector/dot-to-vector-native"); - -const expect = chai.expect; - -if (dotToSVG.isAvailable()) { - describe("dot-to-svg-native - isAvailable", () => { - it("returns false when the executable isn't available", () => { - expect( - dotToSVG.isAvailable({ - exec: "this_executable_does_not_exist_in_the_path", - }) - ).to.equal(false); - }); - it("returns true when the executable is available", () => { - expect( - dotToSVG.isAvailable({ - exec: "dot", - }) - ).to.equal(true); - }); - }); - - describe("dot-to-svg-native - convert", () => { - it("renders an svg when presented with valid dot", () => { - expect(dotToSVG.convert("digraph { a }")).to.contain(""); - }); - - it("throws an error when presented with an invalid dot", () => { - expect(() => { - dotToSVG.convert("this ain't no dot program"); - }).to.throw("Unexpected error occurred. Exit code 1"); - }); - it("throws an error when it can't find the executable", () => { - expect(() => { - dotToSVG.convert("digraph { a }", { - exec: "this_executable_does_not_exist_in_the_path", - }); - }).to.throw( - "Error: spawnSync this_executable_does_not_exist_in_the_path ENOENT" - ); - }); - }); -} diff --git a/test/render/vector/dot-to-vector-native.spec.js b/test/render/vector/dot-to-vector-native.spec.js new file mode 100644 index 00000000..72093fa3 --- /dev/null +++ b/test/render/vector/dot-to-vector-native.spec.js @@ -0,0 +1,72 @@ +const chai = require("chai"); +const dotToVector = require("../../../src/render/vector/dot-to-vector-native"); + +const expect = chai.expect; + +if (dotToVector.isAvailable()) { + describe("dot-to-svg-native - isAvailable", () => { + it("returns false when the executable isn't available", () => { + expect( + dotToVector.isAvailable({ + exec: "this_executable_does_not_exist_in_the_path", + }) + ).to.equal(false); + }); + it("returns true when the executable is available", () => { + expect( + dotToVector.isAvailable({ + exec: "dot", + }) + ).to.equal(true); + }); + }); + + describe("dot-to-vector-native - convert", () => { + it("renders an svg when presented with valid dot when no extra options passed", () => { + expect(dotToVector.convert("digraph { a }")).to.contain(""); + }); + + it("renders an svg when presented with valid dot when svg is passed as an explicit option", () => { + expect( + dotToVector.convert("digraph { a }", { format: "svg" }) + ).to.contain(""); + }); + + it("renders postscript when presented with valid dot when ps is passed as an option", () => { + expect(dotToVector.convert("digraph { a }", { format: "ps" })).to.contain( + "%!PS-Adobe-3.0" + ); + expect(dotToVector.convert("digraph { a }", { format: "ps" })).to.contain( + "%%EOF" + ); + }); + + it("renders postscript when presented with valid dot when pss2 is passed as an option", () => { + expect( + dotToVector.convert("digraph { a }", { format: "ps2" }) + ).to.contain("%!PS-Adobe-3.0"); + expect( + dotToVector.convert("digraph { a }", { format: "ps2" }) + ).to.contain("%%EOF"); + }); + + it("throws an error when presented with an invalid dot", () => { + expect(() => { + dotToVector.convert("this ain't no dot program"); + }).to.throw("Unexpected error occurred. Exit code 1"); + }); + it("throws an error when it can't find the executable", () => { + expect(() => { + dotToVector.convert("digraph { a }", { + exec: "this_executable_does_not_exist_in_the_path", + }); + }).to.throw( + "Error: spawnSync this_executable_does_not_exist_in_the_path ENOENT" + ); + }); + }); +} diff --git a/test/render/vector/svg-native-dot-with-fallback.spec.js b/test/render/vector/vector-native-dot-with-fallback.spec.js similarity index 100% rename from test/render/vector/svg-native-dot-with-fallback.spec.js rename to test/render/vector/vector-native-dot-with-fallback.spec.js diff --git a/test/render/vector/svg-with-viz-js.spec.js b/test/render/vector/vector-with-viz-js.spec.js similarity index 64% rename from test/render/vector/svg-with-viz-js.spec.js rename to test/render/vector/vector-with-viz-js.spec.js index 0d521e56..1474c5d9 100644 --- a/test/render/vector/svg-with-viz-js.spec.js +++ b/test/render/vector/vector-with-viz-js.spec.js @@ -25,3 +25,20 @@ describe("#ast2svg-with-viz-js - integration - ", () => { }); }); }); + +describe("#ast2ps2-with-viz-js - integration - ", () => { + FIXTURE_INPUTS.forEach((pInputFixture) => { + it(`correctly converts ${path.basename( + pInputFixture + )} to postscript`, () => { + const lResult = convert( + JSON.parse(fs.readFileSync(pInputFixture, "utf8")), + { outputType: "oldps2" } + ); + + expect(lResult).to.deep.equal( + fs.readFileSync(pInputFixture.replace(/\.json$/g, ".ps"), "utf8") + ); + }); + }); +}); diff --git a/tools/regenerate_render_fixtures.sh b/tools/regenerate_render_fixtures.sh index 50a3cf59..0ac4cf71 100644 --- a/tools/regenerate_render_fixtures.sh +++ b/tools/regenerate_render_fixtures.sh @@ -11,6 +11,7 @@ find -X test/parse/fixtures/color-*.smcat -exec bin/smcat -T json {} ";" & \ find -X test/parse/fixtures/no-color-*.smcat -exec bin/smcat -T json {} ";" & \ find -X test/parse/fixtures/no-color-*.smcat -exec bin/smcat -T dot --dot-node-attrs "color=pink" {} ";" & \ find -X test/render/fixtures/*.smcat -exec bin/smcat -T oldsvg {} ";" +find -X test/render/fixtures/*.smcat -exec bin/smcat -T oldps2 {} ";" mkdir -p test/render/fixtures/scxml find -X test/render/fixtures/*.scxml -exec bin/smcat -I scxml -T json {} -o {}.re-json ";" bin/smcat -T json test/parse/fixtures/composite.smcat From b9d7a1f5d00c29b068eaf54ed5ec36ece74c5d06 Mon Sep 17 00:00:00 2001 From: sverweij Date: Sun, 10 Jan 2021 11:09:55 +0100 Subject: [PATCH 3/3] renames a variable --- src/render/dot/README.md | 12 ++++++++++++ src/render/vector/vector-with-viz-js.js | 6 ++++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 src/render/dot/README.md diff --git a/src/render/dot/README.md b/src/render/dot/README.md new file mode 100644 index 00000000..bf722b37 --- /dev/null +++ b/src/render/dot/README.md @@ -0,0 +1,12 @@ +## Why does this renderer use `#FFFFFF01` instead of `transparent` for transparency? + +Typically you'll use the `dot` output to translate it to scalable vector graphics +(svg) with GraphViz. In svg `transparent` isn't a color, though (see issue [#129](https://github.com/sverweij/state-machine-cat/issues/129)). +In web browsers this isn't a problem, but less lenient svg interpreters will +render it as black instead. This is suboptimal. + +The obvious alternative is to use `#FFFFFF00` (as svg does allow RGBA), however +GraphViz translates this into `transparent` nonetheless. So to hack around this +the dot renderer uses `01` in the alpha channel in stead (`#FFFFFF01`). GrapViz +nicely translates this to `fill="#ffffff" fill-opacity="0.004"` which is sufficiently +transparent for all practical purposes. diff --git a/src/render/vector/vector-with-viz-js.js b/src/render/vector/vector-with-viz-js.js index f9c65bcf..a1e52211 100644 --- a/src/render/vector/vector-with-viz-js.js +++ b/src/render/vector/vector-with-viz-js.js @@ -2,7 +2,7 @@ const viz = require("viz.js"); const options = require("../../options"); const ast2dot = require("../dot"); -const MAPPITYMAP = { +const OUTPUT_TYPE2FORMAT = { oldsvg: "svg", oldps2: "ps2", }; @@ -10,5 +10,7 @@ const MAPPITYMAP = { module.exports = (pAST, pOptions) => viz(ast2dot(pAST, pOptions), { engine: options.getOptionValue(pOptions, "engine"), - format: MAPPITYMAP[options.getOptionValue(pOptions, "outputType")] || "svg", + format: + OUTPUT_TYPE2FORMAT[options.getOptionValue(pOptions, "outputType")] || + "svg", });