4. Usos interessantes

Como mostrado anteriormente (veja Exemplo 3) o DocBook é um excelente aliado para elaborar documentação em trechos de código, funções, etc. facilitando a elaboração de comentários em linhas ou grupos de linhas específicos.

Há a possibilidade de ter as linhas automaticamente numeradas, ao invés de se usar o recurso de chamada (callout) de comentário. Para isso basta se acrescentar um parâmetro a mais no comando e a alteração se refletirá na próxima conversão.

Exemplo 4. Códigos de programas com linhas numeradas

    #include <stdio.h>
    #include <string.h>
    
    #define FIM_CR 13
    #define FIL_LF 10
    
    
              


int main(int argc, char *argv[]);
int main(int argc, char *agrv[]) { FILE *input_file; FILE *output_file; char caractere; char fim_de_caractere; int tamanho_caractere; char appendix[5] = ".dos"; char *output_name; char *input_name;

Algo ainda mais interessante para se fazer é incluir o arquivo de código automaticamente. O código abaixo veio diretamente do arquivo de programa e, portanto, nÃo há nenhuma marcação adicional neste:

Exemplo 5. Códigos de programas inseridos diretamente do arquivo fonte

    #include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {   
  FILE *input_file;
  FILE *output_file;
  
  char caractere;
  char fim_de_caractere;
  char fim_cr = 13;
  char fim_lf = 10;
  int tamanho_caractere;

  char appendix[5] = ".dos";
  char *output_name;
  char *input_name;

  if (argc < 2) {
    puts("Você precisa passar o nome de um arquivo.\n");
    return 0;
  }

    
  /*  Creates the output filename based on the input plus a suffix. */
  input_name = argv[1];
  output_name = strcat(input_name, appendix);

  /*  Open input and output files. */
  if ((output_file = fopen(output_name, "w")) == NULL) {
    fprintf(stderr, "Cannot open %s\n", output_name);
    return 0;
  }
  if ((input_file = fopen(input_name, "r")) == NULL) {
    fprintf(stderr, "Cannot open %s\n", input_name);
    return 0;
  }

  /* Varre a caractere procurando pelo LF */
  caractere = fgetc(input_file); 
  
  printf(" Antes... %c \n\n", caractere); /*  depuração */
  
  while ( caractere != EOF ) {
    
    printf("Oi!!!\n\n\n"); /* depuração */
    
    if ( caractere == fim_lf ) { /*  Se achou o LF acrescenta antes o CR */
      fputc(fim_cr, output_file);
    }
    /*  Grava a caractere alterada ou não */
    fputc(caractere, output_file);
    
    /*  Lê o próximo caractere */
    caractere = fgetc(input_file);
  }
   
  fclose(output_file);
  fclose(input_file);
  
}

Como se vê, as utilidades do DocBook são diversas tanto para a documentação de programas quanto para se escrever livros.