Comments 19
Код может быть красивым сам по себе
UPD: не заметил bool
В целом, машинно-сгенерированные диаграммы доставляют проблемы. Всегда окажется, что надо сдвинуть конкретный блок на сантиметр, и без приседаний это невозможно. Или машина производит слишком шумный результат, который трудно читать. Поэтому лучший вариант -- руками.
Каждый инструмент для своих задач
При этом разработчики строят на этом свою модель монетизации. Бесплатные dagre и elk делют "шумные" результаты, с ними надо искать приемлимый результат, а вот tala позиционируется как инструмент, который будет делать все гораздо чище. Не тестировал, для небольших диаграмм достаточно первых двух.
Как вариант, в такой ситуации можно сохранить диаграмму в SVG и поправить в Inkscape или другом редакторе.
отчасти соглашусь, но как часто я встречал ситуации, когда все сваливалось к передвижению блоков и выравниванию. Это один из вариантов прокрастинации, на мой взгляд.
Очень интересно, спасибо за статью.
Вот еще недавно была статья на похожую тему, в комментариях там еще примеров накидали.
Сайт для сравнения: https://text-to-diagram.com/
какие у него корневые отличия от PlantUML?
Лицензия, год первого релиза, язык разработки, стиль отображения, язык разметки, вставка иконок и картиночек, вставка LaTeX и рендеринг формул, автоформатирование и прочая
А в обратную сторону оно умеет? Базовый пример: я в утилите рисую диаграмму, а она мне её код выдаёт.
Интересная мысль. По ключам CLI не умеет:
d2 --help
Usage:
d2 [--watch=false] [--theme=0] file.d2 [file.svg | file.png]
d2 layout [name]
d2 fmt file.d2
d2 compiles and renders file.d2 to file.svg | file.png
It defaults to file.svg if an output path is not provided.
Use - to have d2 read from stdin or write to stdout.
See man d2 for more detailed docs.
Flags:
-w, --watch $D2_WATCH watch for changes to input and live reload. Use $HOST and $PORT to specify the listening address.
(default localhost:0, which is will open on a randomly available local port). (default false)
-h, --host string $HOST host listening address when used with watch (default "localhost")
-p, --port string $PORT port listening address when used with watch (default "0")
-b, --bundle $D2_BUNDLE when outputting SVG, bundle all assets and layers into the output file (default true)
-d, --debug $DEBUG print debug logs. (default false)
-l, --layout string $D2_LAYOUT the layout engine used (default "dagre")
-t, --theme int $D2_THEME the diagram theme ID. For a list of available options, see https://oss.terrastruct.com/d2 (default 0)
--pad int $D2_PAD pixels padded around the rendered diagram (default 100)
-v, --version get the version (default false)
-s, --sketch $D2_SKETCH render the diagram to look like it was sketched by hand (default false)
Subcommands:
d2 layout - Lists available layout engine options with short help
d2 layout [name] - Display long help for a particular layout engine, including its configuration options
d2 fmt file.d2 - Format file.d2
See more docs and the source code at https://oss.terrastruct.com/d2
По факту можно попробовать сделать запрос на feature или предложить PR с этим функционалом.
Ну и код утилиты она точно не выдаст никогда, не та область применения. Все таки это создание диаграмм.
Максимум - преобразование из SVG, созданного ранее, в формат d2 обратно.
Выглядит интересно. Однако для общности я бы вспомнил два других, также весьма развитых и обвешанных плагинами средства декларативного описания диаграмм: https://plantuml.com и https://mermaid.js.org. Просто, чтобы не выглядело, что D2 это что-то новое и уникальное.
Сам издавна пользуюсь plantuml, по-моему это самая старая из утилит для построения UML и не только, диаграмм, хотя местами неконсистентность его синтаксиса раздражает.
Отдельное спасибо автору за ссылку на https://github.com/nhooyr/websocket, a то ушедшая в архив горилла выглядела как-то уж уныло безальтернативно :)
Декларативное построение диаграмм