Comments 13
Круто. Можно ещё М4 подтянуть, наверное :)
А зачем нужен Q(), почему не сразу QUOTE()?
С препроцессору (cpp) вообще все равно какой там язык (С, C++, dot, DeviceTree, assembler).
Задача cpp вставка и замена текста.
Деревья устройств в Linux тоже обрабатываются препроцессором.
Спасибо Вам за вашу статью.
Я вот теперь использую синергию препроцессора и dot
https://habr.com/ru/post/688542/
для авто генерации документации.
И очень рад, что существует такой замечательный язык dot.
Вам удавалось разобраться как в graphviz поворачивать прямоугольники на произвольный угол не искажая их формы?
Здравствуйте! Нет, вращать фигуры при отрисовки графа я не пробовал, не было такой необходимости. По это причине я не особо изучал изобразительные возможности графвиза. Вы можете написать вопрос самому Эмднму Гаснеру-одному из авторов, собственно он сам мне подсказал идею про препроцессор, когда я мучался реализуюя подобие инклюдов.
Есть ли способ пометить участок кода чтобы Си препроцессор его не менял?
Чтобы как встретилась строка #include <file.h> так и осталась в первозданном виде.
Первое, что приходит в голову, это поместить такую строку как текст в атрибут узла.
поместить такую строку как текст в атрибут узла
Как это выглядит в коде? Что такое атрибут узла ?
Определим узел A:
A[xlabel="Метка для изображения узла" code_C="int a = 32; char b = 2;"
]
xlabel и code_C это атрибуты узла. Причем xlabel это атрибут который предопределен в Graphviz и его текст при рендеринге графа будет показан рядом с изображением узла.
Второй атрибут пользовательский, я выдумал ему название и значение. Узел будет хранить его. Прочитать его значение или изменить можно функциями API.
Синергия Graphviz и препроцессора C/C++