Doxygen: как сделать ссылку на пользовательский якорь сгенерированного Doxygen файла HTML? - PullRequest
1 голос
/ 21 апреля 2020

Я использую Doxygen 1.8.17 и CMake 3.14+ для документирования старого унаследованного приложения на Fortran 77.

Я не могу решить следующий вариант использования с Doxygen:

Одна подпрограмма, расположенная в файле с именем myenum.f90, определяет некоторые значения для документации Doxygen, и задается команда @anchor.

!> @brief get myenum
subroutine get(myenum)
!> @param[out] myenum
   integer myenum

   !> @anchor enum_myenum myenum's meaning
   !! value  | meaning
   !! :-----:|:-------:
   !! 1      |left
   !! 2      |center
   !! 3      |right 

   !> Compute myenum (code skipped)
   myenum = 1   
end subroutine

Другая подпрограмма, расположенная в файле с именем dosomething.f90, использует эти значения и ссылается на привязку, чтобы избежать дублирования документации.

!> do something based on myenum
subroutine dosomething(myenum, mystuff)
    integer myenum !< @param[in] myenum [based on myenum enumerate](@ref enum_myenum)
    character*(*) mystuff !< @param[out] my stuff

    if (myenum.eq.1) then
        mystuff='left'
    elseif (myenum.eq.2) then
        mystuff='center'
    elseif (myenum.eq.3) then
        mystuff='right'
    endif
end subroutine

Гиперссылка создается внутри файла dosomething<...>.html, созданного Doxygen. Цель ссылки - это не файл myenum<...>.html, сгенерированный Doxygen, а файл Fortran myenum.f90.

Есть ли способ установить цель ссылки на myenum<...>.html в местоположении якоря?

1 Ответ

1 голос
/ 21 апреля 2020

Doxygen имеет несколько способов создания ссылок, с помощью команды @ref, используя синтаксис уценки, некоторые автоматы c linking et c. Также возможно использовать конструкцию \link ...\endlink.

Из вашего примера (и моих тестов) похоже, что синтаксис @ref и уценка в этом случае не работают. Я попытался использовать команду \link.., и это (насколько я вижу) работает, мой, немного расширенный, пример:

!> do something based on myenum                                                                                                     subroutine dosomething(myenum, mystuff, mythird)
    integer myenum           !< @param[in]  [based on markdown syntax with @@ref](@ref enum_myenum)
    character*(*) mystuff    !< @param[out] @ref enum_myenum Based on @@ref command
    double precision mythird !< @param[out] @link enum_myenum based on @@link command \endlink

    if (myenum.eq.1) then
        mystuff='left'
    elseif (myenum.eq.2) then
        mystuff='center'
    elseif (myenum.eq.3) then
        mystuff='right'
    endif
end subroutine

Также с текущей версией Doxygen 1.8. 18 и текущий мастер (1.8.19 (cd581388f3d013c501e3cefbaf3e81cf93d46fcb)) проблема все еще присутствует.

Определенно стоит отправить отчет о проблеме / ошибке в трекер проблем с doxygen: https://github.com/doxygen/doxygen/issues/new

...