Doxygen: ¿Mostrar valores numéricos de Enum sin cambiar CSS?

4 minutos de lectura

avatar de usuario de noti
noti

Necesito una forma de obtener doxygen para mostrar el valor real del miembro enumerado en la salida de doxygen. Por ejemplo tengo:

///MyEnum
typedef enum My_Enum
{
MY_ENUM_0,///<MY_ENUM_0
MY_ENUM_1,///<MY_ENUM_1
MY_ENUM_2 ///<MY_ENUM_2
} My_Enum;

La salida es:

MyEnum.
Enumerator:
MY_ENUM_0
      MY_ENUM_0.
MY_ENUM_1
      MY_ENUM_1.
MY_ENUM_2
      MY_ENUM_2.

lo que quiero es:

Enumerator:
MY_ENUM_0
          0 MY_ENUM_0.
MY_ENUM_1
          1 MY_ENUM_1.
MY_ENUM_2
          2 MY_ENUM_2.

O algo similar.

  • Recientemente volví a ver esta pregunta, mi consejo fue abrir un problema en el rastreador de problemas de doxygen (github.com/doxygen/doxygen/problemas/nuevo)

    – alberto

    19 de septiembre de 2018 a las 17:27

  • consulte stackoverflow.com/questions/52387561/…

    – alberto

    19 sep 2018 a las 17:54

Avatar de usuario de Nick
Mella

No hay una manera de hacer esto directamente desde doxygen que se me ocurra. Doxygen no es un compilador de C. Por lo tanto, no derivará el valor de una enumeración que es una constante de tiempo de compilación.

Lo más parecido que puede hacer el doxígeno es expandir selectivamente sus macros ya que tiene un preprocesador C. Entonces, si tiene algún valor asignado a una constante que se deriva de la expansión del preprocesador, doxygen puede expandir las macros y mostrarle lo que se asignará.

Sobre la base de la respuesta de TheCodeArtist, podría considerar escribir un script que se ejecute antes de doxygen, haga copias de sus archivos, busque este patrón:

enum *** {
    ***, ///< %VAL%:

y reemplaza cada ocurrencia de %VAL% con el valor que debería ser para que no esté al día manualmente con los números. Después de que doxygen ejecute los archivos originales que contienen los tokens %VAL%, será necesario reemplazarlos. Esa no es una solución particularmente elegante o robusta.

  • Ver mi comentario con la pregunta.

    – alberto

    20 sep 2018 a las 15:51

  • @albert Gracias por esa sugerencia, también gracias por vincular la otra pregunta sobre este tema. Creo que esta es una buena idea para una nueva función. Me encontré en una situación en la que tuve que calcular semimanualmente un valor enumerado más de unas pocas veces.

    – Nick

    20/09/2018 a las 19:34

Avatar de usuario de TheCodeArtist
ElCodigoArtista

Usando doxygen, podemos documentar:

  • El enum
  • Es valores
  • A descripción de cada valor

El siguiente fragmento de código describe un ejemplo de los 3 anteriores.

/*! \enum My_Enum
* Documentation of the enum type.
*/

typedef enum My_Enum {
    MY_ENUM_0, /*!< Document the value 0 */
    MY_ENUM_1, /*!< Document the value 1 */
} My_Enum;

/*! \var My_Enum MY_ENUM_0
 * The description of the MY_ENUM_0. Can contain its enumerated name */

/*! \var My_Enum MY_ENUM_1
 * The description of the MY_ENUM_1. Can contain its enumerated name*/

También tenga en cuenta que, dado que la expansión de macro/enumeración NO ocurre dentro de los comentarios de doxygen. Si se usa alguno dentro de un comentario de doxygen, entonces deben expandirse usando INPUT_FILTER. Por ejemplo:

INPUT_FILTER = sed /MY_ENUM_0/0

es necesario para el siguiente fragmento de código

typedef enum My_Enum {
    MY_ENUM_0, /*!< MY_ENUM_0 */
    ...

También echa un vistazo a esto respuesta para obtener detalles sobre los múltiples estilos de comentarios de doxygen:

  • ///< <comment>
  • /*!< <comment> */

  • Esto no responde la pregunta. El valor de MY_ENUM_0 es 0, pero no será visible en el documento doxygen generado por el código en su respuesta.

    – Étienne

    9 de abril de 2014 a las 12:09

  • El comentario de doxygen /*!<Document the value 0 */ se muestra junto con MY_ENUM_0 en la documentación generada como se muestra en este respuesta de ejemplo. Cada uno de estos comentarios tendría que ser value is 0, value is 1… etc. para cada miembro de la enumeración.

    – El Artista del Código

    09/04/2014 a las 12:20


  • Debido a que usted mismo escribió “0”, el OP pregunta cómo hacer que Doxygen genere el “0”.

    – Étienne

    9 de abril de 2014 a las 12:21

  • Sí, tiene usted razón. Implica esfuerzo manual. Esto es lo más cercano que sé que funciona.

    – El Artista del Código

    9 de abril de 2014 a las 12:23


  • Claro, no quise ser grosero, el problema es que los valores de enumeración se pueden definir usando macros u otros valores de enumeración, y luego puede ser bastante complicado saber qué valor tiene la enumeración y documentarlo/actualizarlo a mano.

    – Étienne

    9 de abril de 2014 a las 12:26

¿Ha sido útil esta solución?