2009-10-21 9 views
5

Estoy creando documentación interna para un proyecto de C++ usando Doxygen. Estoy haciendo que Doxygen incluya la fuente de métodos, etc., pero esto hace que la página sea un poco difícil de escanear. Me gustaría que se comporte como rdoc y oculte la fuente en un bloque que está colapsado de forma predeterminada.¿Cómo generar secciones de códigos plegables de estilo rdoc?

Pensé que HTML_DYNAMIC_SECTIONS podría permitirme hacer esto, pero, por desgracia, el registro de cambios dice que esa opción solo afecta a diagramas y gráficos.

Tal vez podría hacerlo editando el LAYOUT_FILE?

De todos modos, gente inteligente, ¿cómo puedo obligar a Doxygen a generar secciones de código colapsables?

Respuesta

4

si includ [ing] la fuente de los métodos, etc., [...] hace que el tipo de página duro para escanear, ¿por qué no acaba de enlace a ella (SOURCE_BROWSER = YES) en lugar de incluidos (INLINE_SOURCES = YES)? esto haría que las páginas fueran más fáciles de escanear y más rápidas de cargar, y la fuente seguiría estando accesible (a expensas de una carga de página de origen más). Depende de la frecuencia con la que realmente necesites acceder a la fuente, supongo.

una vez dicho esto, hay es una forma de generar secciones de código plegables (que tendrá que modificar el código fuente y recompilar Doxygen, sin embargo):

<div class="dynheader"><div class="dynsection"> 
    [collapsible section] 
    </div></div> 
  • incluyan código secciones están marcadas así: <div class="fragment"><pre class="fragment">...</pre></div>
  • por lo tanto, para hacer que el código incluido secciones plegables, lo que tiene que sea

    • modificar the code that generates la <div class="fragment"><pre class="fragment">...</pre></div> para generar <div class="dynheader"><div class="dynsection">...</div></div> (y probablemente ajustar algunos css), o
    • cambie el javascript initDynSections() function que escanea y contrae las secciones colapsables para reconocer <div class="fragment"><pre class="fragment"> como una de ellas.

la aplicación (o tomar la ruta de SOURCE_BROWSER :)) se deja como ejercicio para el lector. ¡buena suerte!

oh, y si tuviera éxito con un parche, sería genial si pudiera submit it dimitri para que pueda incluirlo en una versión futura. ¡Gracias!

+0

> ¿por qué no solo lo vincula (SOURCE_BROWSER = YES) en lugar de incluirlo (INLINE_SOURCES = YES)? Porque me gusta la forma en que rdoc funciona, supongo. En parte, creo que es porque con INLINE_SOURCES todavía tiene que desplazarse a la definición de la función. > tendrá que modificar la fuente y recompilar Doxygen, aunque Supongo que la respuesta es: "no, doxygen no puede hacer eso a menos que usted lo escriba en usted mismo". Suficientemente bueno. Y gracias por las instrucciones realmente detalladas sobre * cómo * agregarlo yo mismo ... si realizo esa modificación, estaré seguro y la enviaré. –

1

siguiendo aquí utilizando el motor de búsqueda de mi elección, solo quiero dejar una nota aquí que no es absolutamente necesario modificar cualquier fuente de doxígeno.

Cuando se hizo esta pregunta probablemente no había posibilidad de embed pure html usando la etiqueta htmlonly pero con esto en mente uno es capaz de crear secciones de contenedores plegables que abusan de una función llamada toggleVisibility

function toggleVisibility(linkObj) 
{ 
    var base = $(linkObj).attr('id'); 
    var summary = $('#'+base+'-summary'); 
    var content = $('#'+base+'-content'); 
    var trigger = $('#'+base+'-trigger'); 
    var src=$(trigger).attr('src'); 
    if (content.is(':visible')===true) { 
    content.hide(); 
    summary.show(); 
    $(linkObj).addClass('closed').removeClass('opened'); 
    $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); 
    } else { 
    content.show(); 
    summary.hide(); 
    $(linkObj).removeClass('closed').addClass('opened'); 
    $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); 
    } 
    return false; 
} 

que está disponible actualmente cada vez que la documentación se genera en un archivo llamado dynsections.js ubicado en la raíz de la documentación.

Con respecto a este código, se conocen las condiciones para poder crear código plegable desde su propia documentación utilizando Javascript evitando fallas de ejecución interna en esta función y evitando que se interprete el código javascript.

  1. elemento DOM con un identificador único id
  2. otro elemento dom encapsulado con el identificador único id -RESUMEN
  3. otro elemento dom encapsulado con el identificador único id -Contenido elemento
  4. otra dom encapsulado con el identificador único id -trigger
  5. el elemento id -trigger debe contener un atributo src con al menos 1 carácter
  6. class los atributos de los contenedores principales no importan

Con theese condiciones en cuenta que uno puede crear el siguiente código.

## <a href="javascript:toggleVisibility($('#example-div'))">Fold me</a> 
## <div id="example-div"> 
## <div id="example-div-summary"></div> 
## <div id="example-div-content"> 
##  <pre> 
##  foo 
##  bar 
##  </pre> 
## </div> 
## <div id="example-div-trigger" src="-"></div> 
## </div> 
## @htmlonly <script type="text/javascript">$("#example-div").ready(function() { toggleVisibility($("#example-div")); });</script> @endhtmlonly 

El código doxygen anterior se usa para documentar código de fiesta usando bash-doxygen por lo que podría parecer un poco diferente de código doxygen puro. La primera parte que involucra a los contenedores div ya se describe mencionando las condiciones para que coincidan con la fuente de la función toggleVisibility y la haga ejecutable sin ningún error ajustando los comentarios doxygen para nuestras necesidades.

El prefijo de id único utilizado aquí es example-div. En la línea uno, hay una configuración de enlace hyperref para desplegar una sección usando javascript directamente junto con algún código jQuery.

Lo que queda es el delineador al final. Contiene la secuencia de comandos jQuery que se debe ejecutar para doblar inicialmente el segmento específico. Para la fiesta-doxygen (y probablemente otros idiomas) el bloque tiene que ser un chiste debido ámbito de bloque de la secuencia de comandos

Normalmente los contenidos entre \ htmlonly y \ endhtmlonly se inserta tal cual. Cuando desee insertar un fragmento de HTML que tenga un alcance de bloque como una tabla o lista que debe aparecer fuera de <p> .. </p >, esto puede generar un código HTML no válido. Puede usar \ htmlonly [block] para hacer que doxygen termine el párrafo actual y lo reinicie después de \ endhtmlonly.

como se notó en el doxygen documentation y un comentario debajo de la solución marcada a la derecha del stackoverflow answer on including script tags in doxygen documentations.

Gracias por leer. Espero que esto ayude a algunas personas que vienen aquí.

Cuestiones relacionadas