Как установить цвет для функции в графе вызовов? - PullRequest
0 голосов
/ 29 мая 2020

Граф вызовов doxygen обычно окрашивает одну функцию в серый цвет, а все остальные функции в дереве вызовов - в белый. К сожалению, мне нужно раскрасить несколько функций в специальный цвет для моего случая использования. Например, следующая main.c

/**
 * @file main.c
*/

/// @brief Foos around
void foo() {}

/// @brief Bars around
void bar() { foo(); }

/// @brief Quux around
void quux() {}

/// @brief System entry point
int main() {
   foo();
   bar();
   quux();
}

вместе со следующей конфигурацией Doxygen

EXTRACT_ALL            = YES
CALL_GRAPH             = YES

генерирует следующее дерево:

default call graph generation

Хотя в целом это нормально, некоторые внутренние правила требуют, чтобы bar всегда был окрашен в оранжевый цвет, поскольку это «небезопасная» функция. Точно так же я должен окрасить foo в бирюзовый цвет, чтобы показать, что это безопасно. Что-то, что я представляю, это

example call graph

Можно ли установить цвет в графиках, сгенерированных Doxygen, с помощью команд Doxygen? Например, какая-нибудь команда magi c, такая как несуществующий @dotnodecolor green? Или мне нужно вручную обработать все графики?

1 Ответ

1 голос
/ 29 мая 2020

В doxygen нет возможности установить цвет узла, поэтому, к сожалению, вам придется самостоятельно публиковать соответствующие графики.

Это можно обойти, переопределив команду dot (это немного среднее)

  • чтение файла doxygen dot
  • изменение обязательного поля
  • запись файла обратно
  • запуск реального dot command.

С помощью doxygen -d extcmd вы можете увидеть используемые аргументы в вызове, например, dot.

Для вашего случая вывод последнего будет ( DOT_IMAGE_FORMAT = png):

Executing external command `dot ".../html/main_8c_a49a4b11e50430aa0a78de989ea99e082_cgraph.dot" -Tpng -o ".../html/main_8c_a49a4b11e50430aa0a78de989ea99e082_cgraph.png"`
Executing external command `dot ".../html/graph_legend.dot" -Tpng -o "D:/speeltuin/_stack/quest_color_dot/html/graph_legend.png"`
Executing external command `dot ".../html/main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.dot" -Tpng -o ".../html/main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.png"`
Executing external command `dot ".../html/main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.dot" -Tcmapx -o ".../html/main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.map"`
Executing external command `dot ".../html/main_8c_a49a4b11e50430aa0a78de989ea99e082_cgraph.dot" -Tcmapx -o ".../html/main_8c_a49a4b11e50430aa0a78de989ea99e082_cgraph.map"`

и в случае: DOT_IMAGE_FORMAT = svg

Executing external command `dot ".../html/main_8c_a49a4b11e50430aa0a78de989ea99e082_cgraph.dot" -Tsvg -o ".../html/main_8c_a49a4b11e50430aa0a78de989ea99e082_cgraph.svg"`
Executing external command `dot ".../html/graph_legend.dot" -Tsvg -o ".../html/graph_legend.svg"`
Executing external command `dot ".../html/main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.dot" -Tsvg -o ".../html/main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.svg"`
Executing external command `dot ".../html/main_8c_a49a4b11e50430aa0a78de989ea99e082_cgraph.dot" -Tcmapx -o ".../html/main_8c_a49a4b11e50430aa0a78de989ea99e082_cgraph.map"`
Executing external command `dot ".../html/main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.dot" -Tcmapx -o ".../html/main_8c_ae66f6b31b5ad750f1fe042a706a4e3d4_cgraph.map"`
...