Автоматический отступ в файле graphviz .dot

Я работаю над длинным и сложным архитектурным графом. Отступ документа смешивает вкладки, пробелы и уровни отступа, что сводит меня с ума.

Есть ли простой способ автоматического отступа .dot файлов graphviz в среде Linux?

Чистый инструмент командной строки был бы лучшим, но плагины для популярных редакторов, таких как vim, также были бы хорошим решением.

Обновление:

В отступе vim есть ошибка с : в именах узлов по краям. Например, server_a:event -> log_server; приводит к дальнейшему отступу следующей строки, предположительно потому, что : анализируется как объявление блока (см. комментарии к ответу Гарри Пехконена ). Заключение имени узла в кавычки (например, "server_a":event -> log_server;) решает эту проблему:

#!/usr/bin/python3

import re

dot=open('components.dot').read()
reg=re.compile("(\s)(\S+)(\:.*\-\>)")
print(reg.sub(r'\1"\2"\3', dot))

person Adam Matan    schedule 06.01.2014    source источник


Ответы (2)


Vim обладает знанием синтаксиса точек «из коробки» и, похоже, переустанавливает для меня файлы точек.

Я удалил все отступы, перешел к началу файла и сделал =G

Ваши глобальные значения, связанные с табуляцией, определяют, использовать ли табуляцию/пробелы, сколько и т. д.

Если вы хотите, вы можете создать скрипт с:

> vim -W reIndentAndSave whatever.dot

Отредактируйте свой точечный файл, изменив отступ сверху с помощью

gg=G

...Сохранять

:x

Затем для каждого файла, который вы хотите изменить с помощью только что записанного скрипта,

> vim -s reIndentAndSave somegraph.dot
person Harry Pehkonen    schedule 07.01.2014
comment
Спасибо! Проблема в том, что : в краях сводит vim с ума. Он рассматривает их как новые блоки кода. - person Adam Matan; 07.01.2014
comment
@AdamMatan Я понимаю, что ты имеешь в виду. Мне удалось это сработать, заключив в кавычки хотя бы один из узлов. НЕУДАЧА: узел0:порт0 -> узел1:порт1; УСПЕШНО: узел0:порт0 -> узел1:порт1;. Тем не менее, это усложняет любую попытку его автоматизации :( - person Harry Pehkonen; 08.01.2014
comment
Не совсем - я могу регулярно использовать решение для этого. Будем держать вас в курсе. Спасибо! - person Adam Matan; 08.01.2014
comment
Обновил мой вопрос кодом Python, который устраняет эту проблему, и принял ваш ответ. Спасибо! - person Adam Matan; 08.01.2014

В emacs, если буфер имеет режим, поддерживающий отступ, вы можете изменить отступ для всего буфера следующим образом: C-x h для выбора всего буфера, затем indent-region.

Это интерактивно, не заскриптовано, но работает.

Если в вашем emacs есть graphviz-dot-mode, вы можете попробовать.

Тем не менее, я не полностью удовлетворен результатом в этом конкретном режиме, поскольку он имеет тенденцию не выравнивать закрывающие фигурные скобки с открывающими скобками (по крайней мере, с датами graphviz-dot-mode.el версии 0.3.6 19/02/2011).

person Stéphane Gourichon    schedule 02.10.2015