diff --git a/.gitignore b/.gitignore index a24ac39c17..0e864ec32e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,17 @@ e2e_report.html bin out d2 +# generated svg examples (from make themesdemo) +testdata/examples/svg/ # https://github.com/golang/go/blob/8b67cf0bc6ad657fddcbaaa10729d0086f08f9a9/src/cmd/go/internal/test/test.go#L415-L416 -e2etests.test \ No newline at end of file +e2etests.test + +# nix/devenv related +# .envrc +devenv.* +!devenv.nix +.devenv* +.direnv +.pre-commit-config.yaml + diff --git a/Makefile b/Makefile index 346e9649ae..94e0dfe500 100644 --- a/Makefile +++ b/Makefile @@ -24,3 +24,20 @@ race: fmt .PHONY: js js: gen cd d2js/js && NPM_VERSION="${NPM_VERSION}" prefix "$@" ./make.sh all + +SVGDIR := testdata/examples/svg +SVGS = $(shell ./d2 themes | gawk -F':' '/^-/{ printf "$(SVGDIR)/themex-%03d.svg ",$$2 }' || :) + +.PHONY: clean +clean: + rm -f $(SVGS) d2 + rmdir $(SVGDIR) + +.PHONY: themesdemo +themesdemo: $(SVGS) d2 + +$(SVGDIR)/themex-%.svg: testdata/examples/themex.d2 + $(info Building $@ from $< ...) + ./d2 -t $$(( 10#$* )) $< $@ + +d2: build diff --git a/testdata/examples/themex.d2 b/testdata/examples/themex.d2 new file mode 100644 index 0000000000..4dba20d830 --- /dev/null +++ b/testdata/examples/themex.d2 @@ -0,0 +1,50 @@ + +vars: { + d2-config: { + layout-engine: elk + } +} +network: { + cell tower: { + satellites: { + shape: stored_data + style.multiple: true + } + + transmitter + + satellites -> transmitter: send + satellites -> transmitter: send + satellites -> transmitter: send + } + + online portal: { + ui: {shape: hexagon} + } + + data processor: { + storage: { + shape: cylinder + style.multiple: true + } + } + + cell tower.transmitter -> data processor.storage: phone logs +} + +user: { + shape: person + width: 130 +} + +user -> network.cell tower: make call +user -> network.online portal.ui: access { + style.stroke-dash: 3 +} + +api server -> network.online portal.ui: display +api server -> logs: persist +logs: {shape: page; style.multiple: true} + +network.data processor -> api server +