2012-08-03 24 views
6

Tengo bastantes anclajes para fotografiar en doxygen, p.Anclajes numerados en doxygen

\anchor pic_foo 
\image html foo.gif "My Caption" 
\anchor pic_bar 
\image html bar.gif "My Caption" 

Cada vez cuando uso \ref para enlazar uno de esos, que tiene que recuperar alguna descripción agradable así que el nombre de la prima de anclaje no aparece en salida.

¿Es posible tener algo así como anclas numeradas en doxygen donde el texto del enlace será el número de ese ancla? Idealmente algo como:

\anchor pic_foo 
\image html foo.gif "My Caption" 
\anchor pic_bar 
\image html bar.gif "My Caption" 

As Figure \ref pic_foo shows... Figure \ref pic_bar is... 

lo ideal sería traducir en:

As Figure 1 shows... Figure 2 is... 

donde el número es el enlace. Me encantaría cualquier esquema de conteo (documentación global o página local).

Respuesta

4

No creo que el número de cifras automáticas, ya sea dentro de una página o en toda la documentación, sea posible con doxygen (me gustaría que lo corrijan aquí). Sin embargo, una solución fácil a su pregunta es reemplazar su texto de anclaje con números detallados, es decir, "uno", "dos", "tres" ... etc. Alternativamente, si tiene muchas figuras podría usar números romanos. Los números simples no parecen funcionar como enlaces de anclaje.

Su ejemplo será entonces, con el texto adicional en los pies de figura,

\anchor one 
\image html foo.gif "Figure one: My Caption" 
\anchor two 
\image html bar.gif "Figure two: My Caption" 

As Figure \ref one shows... Figure \ref two is... 

resultando en

Here Figure one shows... Figure two is... 

con one y two hipervínculos a sus figuras.

Luego puede definir un alias en su archivo de configuración, digamos \fref, definido como Figure \ref que precederá automáticamente a los números hipervinculados con el texto "Figura".

¿Es aceptable esta solución? La única otra alternativa en la que puedo pensar involucra postprocesar la salida de doxígeno, pero la solución anterior es de lejos la más simple.

actualización

El siguiente código Python va a transformar referencias de anclaje a un contador incremental:

# Test documentation. 
s = r""" 
\anchor pic_foo 
\image html foo.gif "My Caption" 
\anchor pic_bar 
\image html bar.gif "My Caption" 

As Figure \ref pic_foo shows... Figure \ref pic_bar is... 
""" 

# Split string into a list of lines. 
s = s.split('\n') 

# Dictionaries for mapping anchor names to an incrementing counter. 
d = {} 

numbers = {1: 'one', 
    2 : 'two', 
    3 : 'three'} 

counter = 1 

# Find all anchor links and map to the next counter value. 
for line in s: 
    if r'\anchor' in line: 
     d[line.split(r'\anchor ')[1]] = numbers[counter] 
     counter += 1 

# Reform original string. 
s = '\n'.join(s) 

# Replace anchor links with appropriate counter value. 
for key, value in d.items(): 
    s = s.replace(key, value) 

print s 

de ejecutar este script resultados en la salida

\anchor one 
\image html foo.gif "My Caption" 
\anchor two 
\image html bar.gif "My Caption" 

As Figure \ref one shows... Figure \ref two is... 

Es trivial para modificar la secuencia de comandos anterior para leer desde la entrada estándar y escribir a la salida estándar, por lo que esto se puede utilizar fácilmente en unión con la opción de archivo de configuración INPUT_FILTER.

Una cosa a tener en cuenta es que el diccionario numbers tiene que ampliarse para permitir la inclusión de más de tres figuras. Esto es nuevamente trivial, pero probablemente no fácilmente escalable. Las soluciones para el mapeo de números arbitrarios a las palabras apropiadas están disponibles (ver otras preguntas en este sitio) por lo que no me he molestado en implementar esto aquí.

+0

Aprecio el esfuerzo, pero esto está fuera de cuestión. Imagine agregar una nueva imagen entre los dos. Claro, siempre tengo mi función de incremento Emacs-número-palabra y puedo hacerlo lo más sencillo posible. Todavía no creo que ninguno de mis colaboradores esté de acuerdo. – pmr

+0

Esto, por supuesto, no es ideal, pero creo que es la solución más simple que encontrará ya que [doxygen no parece tener ningún comando] (http://www.stack.nl/~dimitri/doxygen/commands.html) o [opciones de enlace automático] (http://www.stack.nl/~dimitri/doxygen/autolink.html) para implementar un contador de incremento. En su lugar, podría escribir un script o XLST para modificar el XML generado por doxygen. Sin embargo, me pregunto si vale la pena solo para evitar cambiar el nombre de algunas etiquetas de figuras de vez en cuando (presumiblemente, una vez que su documentación esté casi completa, las cifras probablemente no cambien demasiado). – Chris

+0

Prefiero ir a un script de shell que pueda usarse como INPUT_FILTER para lograr ese efecto. ¡Piensa en la recompensa mientras lo implementas! ;) – pmr