# Manual do GTK-Doc

1.24

Manual de usuário para desenvolvedores com instruções do uso do GTK-Doc.

Chris Lyttle

     chris@wilddev.net

Dan Mueth

     d-mueth@uchicago.edu

Stefan Sauer (Kost)

     ensonic@users.sf.net

Projeto GTK-Doc

    gtk-doc-list@gnome.org

2000, 2005 Dan Mueth e Chris Lyttle
2007-2014 Stefan Sauer (Kost)

Permissão concedida para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU (GNU Free Documentation License), Versão 1.1 ou qualquer versão mais recente publicada pela Free Software Foundation; sem Seções Invariantes, Textos de Capa Frontal, e sem Textos de Contracapa. Você pode encontrar uma cópia da licença está inclusa.

Muitos dos nomes usados por empresas para distinguir seus produtos e serviços são reivindicados como marcas registradas. Onde esses nomes aparecem em qualquer documentação do GNOME e os membros do Projeto de Documentação do GNOME estiverem cientes dessas marcas registradas, os nomes aparecerão impressos em letras maiúsculas ou com iniciais em maiúsculas.

1.24
29 May 2015
ss bug fix
1.23
17 May 2015
ss bug fix
1.22
07 May 2015
ss bug fixes, dropping deprecated features
1.21
17 Jul 2014
ss correção de erros, desativadas funcionalidades obsoletas
1.20
14 Fev 2014
ss correção de erros, suporte a markdown, melhorias no estilo
1.19
05 Jun 2013
ss correção de erros
1.18
14 Set 2011
ss correção de erros, aceleração, suporte a markdown
1.17
26 Fev 2011
sk atualização de correção de erro urgente
1.16
14 Jan 2011
sk correção de erros, melhorias no layout
1.15
21 Maio 2010
sk correção de erros e regressões
1.14
28 Mar 2010
sk Correção de erro e melhorias na performance
1.13
18 Dez 2009
sk atualização de tarball defeituoso
1.12
18 Dez 2009
sk novas funcionalidades da ferramenta e correção de erros
1.11
16 Nov 2008
mal Migração do GNOME doc-utils
Marcelo Rodrigues marcelopires@mmsantos.com.br
2010 Marcelo Rodrigues
Rafael Ferreira rafael.f.f1@gmail.com
2013 2014 Rafael Ferreira

## Introdução

Este capítulo introduz GTK-Doc e dá um visão geral do que ele é e como ele é usado.

### O que é GTK-Doc?

GTK-Doc é usado para documentar código C. Ele é tipicamente usado para documentar a API pública das bibliotecas, como as bibliotecas do GTK+ e do GNOME. Mas ele também pode ser usado para documentar código de aplicativos.

### Como o GTK-Doc funciona?

O GTK-Doc funciona usando a documentação de funções colocadas dentro dos arquivos fonte em blocos de comentários especialmente formatados ou documentação adicionada aos arquivos modelo que o GTK-Doc usa (apesar disso, note que o GTK-Doc vai documentar apenas funções que são declaradas em arquivos de cabeçalho; ele não irá produzir saída para funções estáticas).

GTK-Doc consiste de um número de scripts perl, cada um executando uma etapa diferente no processo.

Há 5 etapas principais no processo:

1. Escrevendo a documentação. O autor preenche os arquivos fonte com a documentação para cada função, macro, union, etc. (Anteriormente, a informação era inserida em arquivos de modelo gerados, o que não é mais recomendado).

2. Juntando informação sobre o código. gtkdoc-scan varre os arquivos de cabeçalho do código buscando por declarações de funções, macros, enums, structs e unions. Ele cria o arquivo `<módulo>-decl-list.txt` contendo uma lista de declarações, inserindo-as em seções da acordo com o arquivo de cabeçalho no qual se encontram. Na primeira execução, este arquivo é copiado para `<módulo>-sections.txt`. O autor pode reorganizar as seções, e a ordem das declarações dentro delas, para produzir a ordem final desejada. O segundo arquivo que ele gera é `<módulo>-decl.txt`. Este arquivo contém as declarações completas encontradas pela varredura. Se por algum motivo se queira que alguns apareçam nos documentos, no qual declarações completas não puderam ser encontradas pela varredura ou a declaração deveria aparecer de outra forma, pode-se colocar entidades similares aos do `<módulo>-decl.txt` no `<módulo>-overrides.txt`.

   gtkdoc-scangobj também pode ser usado para consultar dinamicamente uma biblioteca sobre qualquer subclasse GObject que ele exporta. Ele salva informações sobre cada posição do objeto na hierarquia de classe e sobre quaisquer propriedades GObject e sinais que ela fornece.

   gtkdoc-scanobj não deveria mais ser usada. Ele era necessário no passado, quando GObject ainda era GtkObject dentro do gtk+.

3. Gerando os arquivos "template". gtkdoc-mktmpl cria uma quantidade de arquivos no subdiretório `tmpl/`, usando a informação coletada na primeira etapa. (Note que ele pode ser executado repetidas vezes e vai tentar garantir que nenhuma documentação será perdida, jamais.)

   Desde o GTK-Doc 1.9, os modelos ("templates") podem ser evitados. Nós encorajamos as pessoas a manter a documentação no código. gtkdocize possui suporte a uma opção `--flavour no-tmpl` que escolhe um makefile que ignora totalmente o uso de tmpl. Se você nunca alterou o arquivo em tmpl manualmente, por favor remova o diretório (ex.: do sistema de controle de versão).

4. Gerando o SGML/XML e HTML/PDF. gtkdoc-mkdb transforma os arquivos modelos em arquivos SGML ou XML no subdiretório `sgml/` ou `xml/`. Se o código fonte contém documentação nas funções, usando os blocos de comentários especiais, ela é mesclada aqui. Se não há arquivos tmpl sendo usados, ele apenas lê documentos dos dados de introspecção e dos fontes. Nós recomendamos usar o Docbook XML.

   gtkdoc-mkhtml transforma os arquivos SGML/XML em arquivos HTML no subdiretório `html/`. Da mesma forma, gtkdoc-mkpdf transforma os arquivos SGML/XML em um documento PDF chamado `<pacote>.pdf`.

   Arquivos nos diretórios `sgml/` ou `xml/` e `html/` são sempre sobrescritos. Não devem ser editados manualmente.

5. Consertando referências cruzadas entre documentos. Após a instalação dos arquivos HTML, gtkdoc-fixxref pode ser executado para consertar referências cruzadas entre documentos separados. Por exemplo, a documentação do GTK+ contém muitas referências cruzadas a tipos documentados no manual do GLib. Ao criar um tarball fonte para distribuição, gtkdoc-rebase transforma todos os links externos em web-links. Ao instalar documentações distribuídas (geradas previamente), o mesmo aplicativo vai tentar transformar links de volta para links locais (onde aquelas documentações estão instaladas).

### Obtendo GTK-Doc

#### Requisitos

Perl v5 - os scripts principais são Perl.

xsltproc - o processador de xslt do libxslt xmlsoft.org/XSLT/

docbook-xsl - as folhas de estilo xsl de docbook sourceforge.net/projects/docbook/files/docbook-xsl

Python - opcional - para gtkdoc-depscan

Um dentre source-highlight, highlight ou vim - opcional - usado para destaque de sintaxe de exemplos

### Sobre GTK-Doc

(CORRIJA-ME)

(História, autores, páginas web, lista de discussão, licença, planos futuros, comparação com outros sistemas similares.)

### Sobre este manual

(CORRIJA-ME)

(pra quem ele serve, onde você pode obtê-lo, licença)

## Preparando seu projeto

As próximas seções descrevem quais as etapas para realizar a integração do GTK-Doc em seu projeto. Estas seções consideram que nós trabalhamos em um projeto chamado "meep". Este projeto contém uma biblioteca chamada "libmeep" e um aplicativo para usuário final chamado "meeper". Nós também consideramos que você estará usando autoconf e automake. Além disso, a seção sobre makefiles simples ou outros sistemas de compilação vai descrever as necessidades básicas para trabalhar em uma configuração de compilação diferente.

### Preparando o esqueleto de uma documentação

No diretório raiz do seu projeto, crie pastas chamadas docs/reference (desta forma, você também pode ter docs/help para documentação para usuário final). É recomendado criar um outro subdiretório com o nome do pacote de documentação. Para pacotes com apenas uma biblioteca, esta etapa não é obrigatória.

Isto pode, então, parecer como exibido abaixo:

Exemplo de estrutura de diretórios

    meep/
      docs/
        reference/
          libmeep/
          meeper/
      src/
        libmeep/
        meeper/

### Integração com autoconf

Muito fácil! Basta adicionar uma linha ao seu script `configure.ac`.

Integração com autoconf

    # verifica por gtk-doc
    GTK_DOC_CHECK([1.14],[--flavour no-tmpl])

Isso vai exigir que todos os desenvolvedores tenham o gtk-doc instalado. Se não houver problema para seu projeto ter uma configuração opcional de compilação de documentação de API, você pode resolver isso como mostrado abaixo. Mantenha assim, pois o gtkdocize está procurando por `GTK_DOC_CHECK` no começo de uma linha.

Mantenha o gtk-doc como opcional

    # verifica por gtk-doc
    m4_ifdef([GTK_DOC_CHECK], [
    GTK_DOC_CHECK([1.14],[--flavour no-tmpl])
    ],[
    AM_CONDITIONAL([ENABLE_GTK_DOC], false)
    ])

O primeiro argumento é usado para verificar a gtkdocversion em tempo de compilação. O segundo argumento é opcional, sendo usado por gtkdocize. A macro GTK_DOC_CHECK também adiciona várias opções de configuração:

1. --with-html-dir=CAMINHO : caminho para as documentações instaladas

2. --enable-gtk-doc : usa gtk-doc para compilar documentação [padrão=no]

3. --enable-gtk-doc-html : compila documentação em formato html [padrão=sim]

4. --enable-gtk-doc-pdf : compila documentação em formato pdf [padrão=não]

GTK-Doc está desabilitado por padrão! Lembre-se de passar a opção `"--enable-gtk-doc"` à próxima execução do `configure`. Do contrário, uma documentação gerada previamente é instalada (o que faz sentido para usuários, mas não para desenvolvedores).

Além disso, é recomendado que você tenha a seguinte linha dentro do seu script `configure.ac`. Ela permite que gtkdocize copie automaticamente a definição de macro para `GTK_DOC_CHECK` para o seu projeto.

Preparação para gtkdocize

    AC_CONFIG_MACRO_DIR(m4)

Após todas as alterações do `configure.ac` serem feitas, atualize o arquivo `configure`. Isso pode ser feito executando novamente `autoreconf -i` ou `autogen.sh`.

### Integração com automake

Primeiro copie o `Makefile.am` dos subdiretório do `exemplo` do gtkdoc-sources para o diretório de documentação da API do seu projeto ( `./docs/reference/<pacote>`). Uma cópia local deveria estar disponível sob, por exemplo, `/usr/share/doc/gtk-doc-tools/examples/Makefile.am`. Se você tiver múltiplos pacotes de documentação, repita isso para cada um.

A próxima etapa é editar as configurações dentro do `Makefile.am`. Todas as configurações tem um comentário em cima que descreve seu propósito. A maioria das configurações são opções extras passadas para as respectivas ferramentas. Cada ferramenta tem uma variável na forma `<NOME-FERRAMENTA>_OPTIONS`. Todas as ferramentas têm suporte a `--help` pra listar os parâmetros disponíveis.

### Integração com autogen

A maioria dos projetos têm um script `autogen.sh` para configurar a infraestrutura de compilação após baixar do sistema de controle de versão (como cvs/svn/git). GTK-Doc vêm com uma ferramenta chamada gtkdocize que pode ser usada em um script assim. O gtkdocize deveria ser executado antes de autoheader, automake ou autoconf.

Executando gtkdocize no autogen.sh

    gtkdocize || exit 1

Ao executar gtkdocize, ele copia `gtk-doc.make` para a raiz do seu projeto (ou qualquer diretório especificado pela opção `--docdir`). Ele também verifica se seu script de configuração pela chamada de `GTK_DOC_CHECK`. Esta macro pode ser usada para passar parâmetros extras para gtkdocize.

Historicamente, GTK-Doc estava gerando arquivos modelo (template) nos quais os desenvolvedores inseriam as documentações. Isso acabou sendo não tão bom (ex.: a necessidade de serem gerados arquivos sob controle de versão). Desde o GTK-Doc 1.9 as ferramentas podem obter todas as informações dos comentários no fonte e, portanto, os arquivos modelo podem ser evitados. Nós encorajamos as pessoas a manter a documentação no código. O gtkdocize possui agora suporte à opção `--flavour no-tmpl` que escolhe um makefile que ignora totalmente o uso de tmpl. Além de adicionar a opção diretamente à chamada do comando, elas também podem ser adicionadas a uma variável de ambiente chamada GTKDOCIZE_FLAGS ou definidas como um segundo parâmetro na macro GTK_DOC_CHECK no script configure. Se você nunca alterou um arquivo tmpl a mão e está migrando de versões antigas do gtkdoc, por favor remova o diretório (ex.: do sistema de controle de versão).

### Executando a compilação da documentação

Após as etapas anteriores, é hora de executar a compilação. Primeiro, nós queremos executar novamente o `autogen.sh`. Se este script executa o configure para você, então forneça a este a opção `--enable-gtk-doc`. Do contrário, execute manualmente `configure` com esta opção em seguida.

A primeira execução do make cria vários arquivos adicionais nos diretórios de documentação. Os importantes são: `<pacote>.types`, `<pacote>-docs.xml` (no passado, .sgml), `<pacote>-sections.txt`.

Executando a compilação da documentação

    ./autogen.sh --enable-gtk-doc
    make

Agora você pode apontar seu navegador para `docs/reference/<pacote>/index.html`. Sim, é um pouco desapontador. Mas aguente aí, durante o próximo capítulo nós vamos dizer como você pode preencher as páginas com vida.

### Integração com sistemas de controle de versão

As a rule of thumb, it's the files you edit which should go under version control. For typical projects it's these files: `<package>.types`, `<package>-docs.xml` (in the past .sgml), `<package>-sections.txt`, `Makefile.am`.

Files in the `xml/` and `html/` directories should not go under version control. Neither should any of the `.stamp` files.

### Integração com makefiles simples ou outros sistemas de compilação

Neste caso, não se deseja usar o automake e, portanto, `gtk-doc.mak`. Será necessário chamar as ferramentas do gtkdoc na ordem correta nos makefiles devidos (ou outras ferramentas de compilação).

Etapas de compilação da documentação

    DOC_MODULE=meep
    // sources have changed
    gtkdoc-scan --module=$(DOC_MODULE) <source-dir>
    gtkdoc-scangobj --module=$(DOC_MODULE)
    gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --source-dir=<source-dir>
    // xml files have changed
    mkdir html
    cd html && gtkdoc-mkhtml $(DOC_MODULE) ../meep-docs.xml
    gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html

Será necessário olhar no `Makefile.am` e no `gtk-doc.mak` para obter as opções extras necessárias.

## Documentando o código

GTK-Doc usa comentários do código fonte com uma sintaxe especial para documentação do código. Além disso, ele obtém informações sobre a estrutura do seu projeto a partir de outros fontes. Na próxima seção, você vai descobrir todas as informações sobre a sintaxe dos comentários.

Localização da documentação

Antigamente, a maioria das documentações tinha que ser preenchida em arquivos residentes dentro do diretório `tmpl`. Isso tem as desvantagens das informações frequentemente não serem atualizadas e também que o arquivo tende a causar conflitos com sistemas de controle de versão.

Para evitar os problemas mencionados a seguir nós sugerimos que a documentação seja colocada dentro das fontes. Este manual vai apenas descrever esta forma de documentar código.

A varredura sabe lidar com a maioria dos cabeçalhos de C sem problemas. Caso se receba avisos (warnings) na varredura que pareça ser um caso especial, pode-se informar ao GTK-Doc para ignorá-los.

Bloco de comentário do GTK-Doc

    #ifndef __GTK_DOC_IGNORE__
    /* código não analisável arqui */
    #endif

Limitations

Note, that GTK-Doc's supports `#ifndef(__GTK_DOC_IGNORE__)` but not `#if !defined(__GTK_DOC_IGNORE__)` or other combinations.

### Comentários de documentação

Um comentário multilinha que começa com um "*" adicional marca um bloco de documentação que será processado pelas ferramentas do GTK-Doc.

Bloco de comentário do GTK-Doc

    /**
     * identificador:
     * documentação ...
     */

O "identificador" é uma linha com o nome do item ao qual o comentário está relacionado. A sintaxe difere um pouco dependendo do item.

O bloco "documentação" também é diferente para cada tipo de símbolo. Tipos de símbolos que levam parâmetros, como funções e macros, têm a descrição de parâmetro começando com uma linha vazia (apenas com um "*"). Posteriormente, segue com a descrição detalhada. Todas as linhas (fora das listagens do programa e seções CDATA) contendo apenas um " *" (espaço em branco e asterisco) são convertidas para quebras de parágrafos. Se você não quiser uma quebra de parágrafo, altere isso para " * " (espaço, asterisco, espaço e espaço). Isso é útil em textos pré-formatados (listagens de código).

Ao documentar um código, descreva dois aspectos:

- O que é: O nome de uma classe ou função pode, em alguns casos, levar a um entendimento equivocado pessoas com experiências diferentes.

- O que isso faz: Fale sobre usos comuns. Coloque em relação com a outra API.

Uma vantagem do hipertexto de texto simples é a habilidade de ter links no documento. Porém, escrever a marcação correta para cada link pode ser entediante. GTK-Doc vem para ajudar fornecendo abreviações úteis.

- Use function() para referir às funções ou macros que levam argumentos.

- Use @param para se referir a parâmetros. Também, use isso ao se referir a parâmetros de outras funções, relacionadas àquele sendo descrito.

- Use %constant para se referir a uma constante, ex.: %G_TRAVERSE_LEAFS.

- Use #symbol para se referir a outros tipos de símbolos, ex.: structs, enums e macros que não levam argumentos.

- Use #Object::signal para se referir a um sinal de GObject.

- Use #Object:property para se referir a uma propriedade de GObject.

- Use #Struct.field para se referir a um campo dentro de uma estrutura e #GObjectClass.foo_bar() para se referir a um vmethod.

Se você precisar usar os caracteres especiais "<", ">", "()", "@", "%" ou "#" em sua documentação sem GTK-Doc alterando-os, você pode usar as entidades XML "&lt;", "&gt;", "&lpar;", "&rpar;", "&commat;", "&percnt;" e "&num;", respectivamente, ou escapá-los com uma contrabarra "\".

DocBook pode fazer mais do que apenas links. Ele também pode ter listas, exemplos, títulos e imagens. A partir da versão 1.20, a forma preferível é usar um subconjunto de sintaxe de formatação de texto básica chamada Markdown. Em versões mais antigas do GTK-Doc, qualquer documentação que inclui Markdown será renderizada como está. Por exemplo, itens de lista aparecerão como linhas começando com um traço.

While markdown is now preferred one can mix both. One limitation here is that one can use docbook xml within markdown, but markdown within docbook xml is not supported.

Em versões mais antigas do GTK-Doc, se você precisasse de suporte para formatação adicional, você precisaria de habilitar o uso de tags de SGML/XML de docbook dentro de comentários de documentação colocando `--xml-mode` ou `--sgml-mode` na variável MKDB_OPTIONS dentro de `Makefile.am`.

Bloco de comentário do GTK-Doc usando Markdown

    /**
     * identificador:
     *
     * parágrafo de documentação ...
     *
     * # Subtítulo #
     *
     * ## Segundo subtítulo
     *
     * # Subtítulo com um link âncora # {#titulo-dois}
     *
     * mais documentação:
     *
     * - item 1 da lista
     *
     *   Parágrafo dentro de um item de lista.
     *
     * - item 2 da lista
     *
     * 1. item numerado da lista
     *
     * 2. outro item numerado da lista
     *
     * Outro parágrafo. [Um link para o site do GNOME](http://www.gnome.org/)
     *
     * ![uma imagem embutida][plot-result.png]
     *
     * [Um link para um título acima][titulo-dois]
     *
     * Um exemplo em linguagem C:
     * |[<!-- language="C" -->
     * GtkWidget *label = gtk_label_new ("Esplêndido!");
     * ]|
     */

Mais exemplos do quais tags de markdown tags tem suporte pode ser encontrado na Referência de sintaxe de markdown de documentação.

Como já mencionado anteriormente, GTK-Doc serve para documentar API pública. Portanto, não é possível escrever documentação para símbolos estáticos. Não obstante, é bom comentar estes símbolos também. Isso ajuda outros a entender seu código. Portanto, é recomendado comentá-los usando comentários normais (sem o segundo "*" na primeira linha). Se, posteriormente, a função precisar ser publicada, tudo que precisa ser feito é adicionar outro "*" no bloco de comentário e inserir o nome do símbolo no lugar correto do arquivo e seções.

### Documentando seções

Cada seção da documentação contém informações sobre uma classe ou um módulo. Para introduzir o componente, pode-se escrever um bloco de seção. A descrição curta também é usada dentro da tabela de conteúdo (sumário). Todos os @fields são opcionais.

Bloco de comentário de sessão

    /**
     * SECTION:meepapp
     * @short_description: A classe do aplicativo
     * @title: Aplicativo Meep
     * @section_id:
     * @see_also: #MeepSettings
     * @stability: Estável
     * @include: meep/app.h
     * @image: aplicativo.png
     *
     * A classe do aplicativo cuida de ...
     */

SECTION:<nome>

  O nome vincula a documentação da seção à respectiva parte do arquivo `<pacote>-sections.txt`. O nome informado aqui deve corresponder à tag <FILE> no arquivo `<pacote>-sections.txt`.

@short_description

  Uma descrição de uma linha da sessão,que mais tarde aparecerá após os links no TOC (sumário) no topo da página da sessão.

@title

  O padrão para título de seção é <nome> da declaração da SECTION. Ele pode ser sobrescrito com o campo @title.

@section_id

  Sobrescreve o uso do título como um identificador de seção. Para GObjects, o <title> é usado como um section_id e para outras seções ele é <MÓDULO>-<title>.

@see_also

  Uma lista de símbolos que estão relacionados a esta sessão.

@stability

  Uma descrição informal do nível de estabilidade que esta API tem. Nós recomendamos o uso de um desses termos:

  - Estável - A intenção de uma interface estável é permitir terceiros arbitrários desenvolverem aplicativos para essas interfaces, lançá-los e ter a confiança de que eles vão funcionar em todos os lançamentos menores do produto (após aquele no qual a interface foi introduzida e naquele mesmo lançamento maior). Atém mesmo em um lançamento maior, espera-se que alterações incompatíveis sejam raras e que tenham fortes justificativas.

  - Instável - Interfaces instáveis são experimentais ou transicionais. Elas são normalmente usadas para dar a desenvolvedores externos um acesso prévio a nova tecnologia ou em rápida alteração, ou para fornecer uma solução interina para um problema que uma solução mais genérica foi antecipada. Nenhuma responsabilidade é assumida pela compatbilidade dos binários ou dos fontes de uma versão menor para a próxima.

  - Privado - Uma interface que pode ser usada dentro da própria pilha do GNOME, mas que não está documentada para usuários finais. Tais funções deveriam ser usadas nas formas especificadas e documentadas.

  - Interna - Uma interface que é interna a um módulo e não requer documentação para o usuário final. Funções que não estão documentadas são presumidas como sendo "Interna".

@include

  Os arquivos `#include` a ser mostrado na sinopse da seção (uma lista separada por vírgulas), sobrescrevendo o valor global do arquivo de seção ou linha de comando. Este item é opcional.

@image

  A imagem a ser exibida no topo da página de referência desta seção. Isso frequentemente será um tipo de diagrama para ilustrar a aparência visual de uma classe ou uma diagrama de suas relações a outras classes. Este item é opcional.

Para evitar recompilação desnecessária após alterações de documentação inseridas nas documentações de seção no fonte em C onde possível.

### Documentando símbolos

Cada símbolo (função, macro, struct, enum, signal e property) é documentado em uma bloco separado. O bloco é melhor localizado perto da definição dos símbolos, de forma que seja fácil de mantê-los em sincronia. Portanto, as funções são normalmente documentadas no fonte em C e macros, scructs e enums no arquivo de header.

#### Tags gerais

Você pode adicionar informação sobre versionamento em todos os elementos de documentação para informar quando uma API foi introduzida ou quando ela se tornou obsoleta.

Tags de versionamento

Since:

  Descrição de desde qual versão do código a API está disponível.

Deprecated:

  Parágrafo denotando que esta função deveria não mais ser usada. A descrição deveria apontar o leitor para a nova API.

(CORRIJA-ME : Informação sobre estabilidade)

Tags gerais

    /**
     * foo_get_bar:
     * @foo: Um foo
     *
     * Obtém o bar do @foo.
     *
     * Returns: bar do @foo
     *
     * Since: 2.6
     * Deprecated: 2.12: Use foo_baz_get_bar() no seu lugar.
     */
    Bar *
    foo_get_bar(Foo *foo)
    {
    ...

#### Annotations

Documentation blocks can contain annotation-tags. These tags will be rendered with tooltips describing their meaning. The tags are used by gobject-introspection to generate language bindings. A detailed list of the supported tags can be found on the wiki.

Annotations

    /**
     * foo_get_bar: (annotation)
     * @foo: (annotation): some foo
     *
     * Retrieves @foo's bar.
     *
     * Returns: (annotation): @foo's bar
     */
    ...
    /**
     * foo_set_bar_using_the_frobnicator: (annotation) (another annotation)
     *                                    (and another annotation)
     * @foo: (annotation) (another annotation): some foo
     *
     * Sets bar on @foo.
     */

#### Bloco de comentário de função

Por favor, lembre-se de:

- Documente se objetos, listas, strings, etc. retornados devem ser não usados/não referenciados/liberada.

- Documente se parâmetros pode ser NULL e o que acontece se eles o forem.

- Mencione pré-condições e pós-condições interessantes onde for apropriado.

Gtk-doc presume que todos os símbolos (macros, funções) começando com "_" são privadas. Elas são tratadas como funções estáticas.

Bloco de comentário de função

    /**
     * nome_da_função:
     * @par1:  descrição do parâmetro 1. Esta pode se estender por mais de
     * uma linha.
     * @par2:  descrição do parâmetro 2
     * @...: uma lista de bars terminada em %NULL
     *
     * A descrição da função vai aqui. Você pode usar @par1 para se referir a parâmetros
     * de forma que eles ficam em destaque na saída. Você também pode usar %constant
     * para constantes, nome_da_função2() para funções e #GtkWidget para links para
     * outras declarações (que pode ser documentada em outro lugar).
     *
     * Returns: um inteiro.
     *
     * Since: 2.2
     * Deprecated: 2.18: Use outra_função() em seu lugar.
     */

Tags de função

Returns:

  Parágrafo descrevendo o resultado retornado.

@...:

  No caso da função possuir argumentos variados, você deveria usar esta tag (@Varargs: também funciona por motivos de histórico).

#### Bloco de comentário de propriedade

Bloco de comentário de propriedade

    /**
     * AlgumWidget:alguma-propriedade:
     *
     * Aqui você pode documentar uma propriedade.
     */
    g_object_propriedade_install_classe (object_classe, PROP_ALGUMA_PROPRIEDADE, ...);

#### Bloco de comentário de sinal

Por favor, lembre-se de:

- Documente quando o sinal é emitido e se ele é emitido antes ou após outros sinais.

- Documente o que um aplicativo pode fazer no manipulador do sinal.

Bloco de comentário de sinal

    /**
     * FooWidget::foobarizado:
     * @widget: o widget que recebeu o sinal
     * @foo: algum foo
     * @bar: algum bar
     *
     * O sinal ::foobarized é emitido cada vez que alguém tenta foobarizar @widget.
     */
    foo_sinais[FOOBARIZAR] =
      g_signal_novo ("foobarizar",
                    ...

#### Bloco de comentário de struct

Bloco de comentário de struct

    /**
     * FooWidget:
     * @bar: algum #gboolean
     *
     * Este é o melhor widget, já mais visto.
     */
    typedef struct _FooWidget {
      /*< private >*/
      GtkWidget parent;

      /*< public >*/
      gboolean bar;
    } FooWidget;

Use `/*< private >*/` antes dos campos da struct privada que você deseja esconder. Use `/*< public >*/` para o comportamento inverso.

Blocos de comentário de struct também podem ser usados para GObjects e GObjectClasses. É normalmente uma boa ideia adicionar um bloco de comentário para uma classe, se ela possui vmethods (pois assim é como elas podem ser documentadas). Para o próprio GOBject pode-se usar os documentos de seção relacionados, tendo um bloco separado para a instância do struct seria útil se a instância possui campos públicos. Uma desvantagem aqui é que isso cria duas entradas no índice do mesmo nome (a estrutura e a seção).

#### Bloco de comentário de enum

Bloco de comentário de enum

    /**
     * Alguma coisa:
     * @ALGUMACOISA_FOO: alguma coisa foo
     * @ALGUMCAOISA_BAR: alguma coisa bar
     *
     * Valores de enum usados para a coisa, para especificar a coisa.
     */
    typedef enum {
      ALGUMACOISA_FOO,
      ALGUMACOISA_BAR,
      /*< private >*/
      ALGUMACOISA_CONTAGEM
    } Alguma coisa;

Use `/*< private >*/` antes de valores privados de enum que você deseja ocultar. Use `/*< public >*/` para o comportamento inverso.

### Tags úteis do DocBook

Aqui estão algumas tags de DocBook que são muito úteis quando se está documentado o código.

Para vincular a outra seção nas documentações do GTK:

    <link linkend="glib-Hash-Tables">Tabela de hashes</link>

O fim do link é o ID do SGML/XML no item superior da páginao a qual você deseja vincular. Para a maioria das páginas isto é atualmente a parte ("gtk", "gdk", "glib") e, então, o título da página ("Hash Tables"). Para os widgets isso é apenas o nome da classe. Espaços e sublinhados são convertidos em '-' para estar em conformidade com SGML/XML.

Para se referir a uma função externa, como, por exemplo, uma função padrão do C:

    <function>...</function>

Para incluir um código de exemplo:

    <example>
      <title>Usando uma GHashTable.</title>
      <programlisting>
          ...
      </programlisting>
    </example>

ou possivelmente este, para fragmentos de código bem curtos que não precisam de um título:

    <informalexample>
      <programlisting>
      ...
      </programlisting>
    </informalexample>

Para este último, GTK-Doc também possui suporte a uma abreviação: |[ ... ]|

Para incluir listas com marcadores:

    <itemizedlist>
      <listitem>
        <para>
          ...
        </para>
      </listitem>
      <listitem>
        <para>
          ...
        </para>
      </listitem>
    </itemizedlist>

Para incluir uma nota que fique fora do texto:

    <note>
      <para>
        Certifique-se de que você liberou os dados após usá-los.
      </para>
    </note>

Para se referir a um tipo:

    <type>unsigned char</type>

Para se referir a uma estrutura externa (não uma descrita nos documentos do GTK):

    <structname>XFontStruct</structname>

Para se referir a um campo de uma estrutura:

    <structfield>len</structfield>

Para se referir a um nome de classe, nós possivelmente poderíamos usar:

    <classname>GtkWidget</classname>

mas você provavelmente vai estar usando #GtkWidget em vez disso (para criar automaticamente um link para a página do GtkWidget - veja as abreviações).

Para enfatizar um texto:

    <emphasis>Isso é importante</emphasis>

Para nome de arquivos use:

    <filename>/home/usuario/documentos</filename>

Para se referir a chaves use:

    <keycombo><keycap>Control</keycap><keycap>L</keycap></keycombo>

## Preenchendo os arquivos extras

Há alguns poucos arquivos extras, que precisam ser mantidos junto com os comentários inseridos no código fonte: `<pacote>.types`, `<pacote>-docs.xml` (no passado, .sgml), `<pacote>-sections.txt`.

### Editando o arquivo de tipos

Se sua biblioteca ou aplicativo inclui GObjects, você deseja que seus sinais, argumentos/parâmetros e posição na hierarquia sejam mostrados na documentação. Tudo que você precisa fazer é listar as funções `xxx_get_type` junto com seus include dentro do arquivo `<pacote>.types`.

Trecho de exemplo de arquivo de tipos

    #include <gtk/gtk.h>

    gtk_accel_label_get_type
    gtk_adjustment_get_type
    gtk_alignment_get_type
    gtk_arrow_get_type

Desde o GTK-Doc 1.8, o gtkdoc-scan pode gerar esta lista para você. Basta adicionar "--rebuild-types" a SCAN_OPTIONS no `Makefile.am`. Se você usar esta abordagem, você não deveria distribuir o arquivo de tipos nem tê-lo sob um controle de versão.

### Editando o documento mestre

O Gtk-Doc produz documentação em DocBook SGML/XML. Ao processar os comentários inseridos nos fontes, as ferramentas do GTK-Doc geram uma página de documentação por classe ou módulo como um arquivo separado. O documento mestre os inclui e os coloca em uma ordem.

Enquanto o Gtk-Doc cria um modelo de documento mestre para você, execução posterior não vai tocá-lo novamente. Isso significa que se pode estruturar a documentação livremente. Isso inclui agrupamento de páginas e adição de páginas extras. O Gtk-Doc agora possui uma suíte de teste, na qual também o documento mestr é recriado do zero. É uma boa ideia verificar isso de tempo em tempo para ver se há itens a serem introduzidos lá.

Não crie tutoriais como documentos extras. Apenas escreva capítulos extras. O benefício de embutir diretamente o tutorial para sua biblioteca na documentação da API é que é mais fácil vincular o tutorial a um símbolo da documentação. Além disso, as chances são mais altas que o tutorial obtenha atualizações junto com a biblioteca.

Então, quais são as coisas para se alterar dentro do documento mestre? Para começar é apenas um pouco. Existem alguns mantedores de espaço (texto em colchetes) que você deve cuidar.

Cabeçalho do documento mestre

    <bookinfo>
      <title>Manual de referência do NOMEDOMÓDULO</title>
      <releaseinfo>
        for NOMEDOMÓDULO [VERSÃO]
        A última versão desta documentação também pode ser encontrada on-line em
        <ulink role="online-location" url="http://[SERVIDOR]/NOMEDOMÓDULO/index.html">http://[SERVIDOR]/NOMEDOMÓDULO/</ulink>.
      </releaseinfo>
    </bookinfo>

    <chapter>
      <title>[Insira o título aqui]</title>

### Editando o arquivo de seção

O arquivo de seção é usado para organizar a saída da documentação pelo GTK-Doc. Aqui pode-se especificar qual símbolo pertence a qual módulo ou classe e controla a visibilidade (pública ou privada).

O arquivo de seção é uma arquivo texto simples com sintaxe do tipo XML (usando tags). Linhas em branco são ignoradas e linhas começando com um "#" são tratadas como linhas de comentários.

A tag <FILE> ... </FILE> é usada para especificar o nome de arquivo, sem qualquer sufixo. Por exemplo, ao usar "<FILE>gnome-config</FILE>" resultará nas declarações da seção serem retornadas no arquivo modelo `tmpl/gnome-config.sgml`, o qual será convertido no arquivo DocBook SGML/XML `sgml/gnome-config.sgml` ou no arquivo DocBook XML `xml/gnome-config.xml`. (O nome do arquivo HTML é baseado no nome do módulo e no título da seção ou, para GObjects, é baseado no nome da classe GObjects convertidos os caracteres para minúsculos).

A tag <TITLE> ... </TITLE> é usada para especificar o título da seção. Ela é usada apenas antes do modelo (se usado) ser criado inicialmente, já que o título definido no arquivo de modelo sobrescreve este. Também, se for usado o comentário SECTION nos fontes, isso está obsoleto.

Você pode agrupar itens na seção usando a tag <SUBSECTION>. Atualmente, ela retorna uma linha em branco entre as subseções na seção de sinópse. Você também pode usar <SUBSECTION Standard> para declarações padrão do GObject (ex.: as funções como g_object_get_type e macros como G_OBJECT(), G_IS_OBJECT() etc.). Atualmente, estas são deixadas fora da documentação. Você também pode usar <SUBSECTION Private> para declarações privadas que não serão retornadas (é uma forma prática de evitar mensagens de aviso sobre declarações não usadas). Se sua biblioteca contém tipos privados que você não deseja que apareçam na hierarquia do objeto e a linha de classes implementadas ou exigidas, adicione-as a uma subseção privada. Se você colocaria o GObject e GObjectClass como structs numa seção padrão ou pública depende se há entradas públicas (variáveis, vmethods).

Você também pode usar <INCLUDE> ... </INCLUDE> para especificar os arquivos #include que são mostrados nas seções de sinópse. Ela contém uma lista separada por vírgula de arquivos #include, sem os sinais de maior que e menor que. Se você define-a fora de quaisquer seções, ela age para todas as seções até o fim do arquivo. Se você define-a em uma seção, ela só vai se aplicar àquela seção.

## Controlando o resultado

Uma execução do GTK-Doc gera arquivos de relatórios dentro do diretório de documentação. Os arquivos gerados são chamados: `<pacote>-undocumented.txt`, `<pacote>-undeclared.txt` e `<pacote>-unused.txt`. Todos eles são arquivos texto simples que podem ser facilmente visualizados e pós-processados.

O arquivo `<pacote>-undocumented.txt` começa com um sumário de cobertura da documentação. Abaixo estão duas seções divididas por linhas brancas. A primeira seção lista símbolos não documentados e incompletos. A segunda seção faz o mesmo para os documentos de seção. Entradas incompletas são aquelas que foram documentadas, mas nas quais, por exemplo, um novo parâmetro foi adicionado.

O arquivo `<pacote>-undeclared.txt` lista símbolos dados no `<pacote>-sections.txt`, mas não encontrados nos fontes. Verifique se eles foram removidos ou se eles foram escritos incorretamente.

O arquivo `<pacote>-unused.txt` lista nomes de símbolo cuja documentação foi localizada na varredura do GTK-Doc, mas que não sabe onde colocá-los. Isso significa que o símbolo não foi adicionado ainda ao arquivo `<pacote>-sections.txt`.

Habilite ou adicione a linha `TESTS=$(GTKDOC_CHECK)` no Makefile.am. Se pelo menos GTK-Doc 1.9 estiver instalado, isso vai executar verificações de sanidade durante a execução de `make check`.

Também pode-se buscar nos arquivos produzidos pela varredura do código aberto: `<pacote>-decl-list.txt` e `<pacote>-decl.txt`. O primeiro pode ser comparado com o arquivo de seção, se ele for mantido manualmente. O segundo lista todas as declarações de cabeçalhos. Se um símbolo está faltando, pode-se verificar se este arquivo o contém.

Se o projeto é baseado em GObject, pode-se também procurar nos arquivos produzidos pela varredura de objetos: `<pacote>.args.txt`, `<pacote>.hierarchy.txt`, `<pacote>.interfaces.txt`, `<pacote>.prerequisites.txt` e `<pacote>.signals.txt`. Se há símbolos faltando em qualquer um deles, pode-se exigir que o GTK-Doc mantenha o arquivo intermediário de varredura para análise posterior, executando `GTK_DOC_KEEP_INTERMEDIATE=1 make`.

## Modernizando a documentação

GTK-Doc está por aí já faz um tempo. Nesta seção, nós listamos novas funcionalidades juntamente da versão desde a qual está disponível.

### GTK-Doc 1.9

Ao usar xml em vez de sgml, na verdade, é possível nomear o documento mestre `<pacote>-docs.xml`.

Essa versão provê suporte `SCAN_OPTIONS=--rebuild-sections` em `Makefile.am`. Quando esta opção está habilitada, o `<package>-sections.txt` é auto-gerado e pode ser removido a partir do VCS. Isso só funciona corretamente para projetos que têm uma estrutura muito regular (ex.: cada par .{c,h} vai criar uma nova seção). Se uma pessoa organiza um projeto próximo a isso atualizando um arquivo de seção mantido manualmente pode ser tão simples quanto executando `meld <package>-decl-list.txt <package>-sections.txt`.

Version 1.8 already introduced the syntax for documenting sections in the sources instead of the separate files under `tmpl`. This version adds options to switch the whole doc module to not use the extra tmpl build step at all, by using `--flavour no-tmpl` in `configure.ac`. If you don't have a `tmpl` checked into you source control system and haven't yet switched, just add the flag to `configure.ac` and you are done.

### GTK-Doc 1.10

Essa versão provê suporte `SCAN_OPTIONS=--rebuild-types` no `Makefile.am`. Quando isso está habilitado, o `<package>.types` é auto-gerado e pode ser removido do VCS. Quando usando essa funcionalidade é importante também configurar o `IGNORE_HFILES` no `Makefile.am` para código que é compilado condicionalmente.

### GTK-Doc 1.16

Essa versão inclui uma nova ferramenta chamada gtkdoc-check. Essa ferramenta pode executar um conjunto de verificações de sanidade na sua documentação. Ela é habilitada adicionando essas linhas ao final do `Makefile.am`.

Habilitar gtkdoc-check

    if ENABLE_GTK_DOC
    TESTS_ENVIRONMENT = \
      DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \
      SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir)
    TESTS = $(GTKDOC_CHECK)
    endif

### GTK-Doc 1.20

A versão 1.18 trouxe algum suporte inicial a markdown. O uso de markdown em comentários de documentação é menos intrusiva do que escrever xml de docbook. Essa versão melhora em muito nisso e adiciona muito mais estilos. A seção que explica a sintaxe de comentário tem todos os detalhes.

## Documentando outras interfaces

Até agora nós temos usado o GTK-Doc para documentar a API de um código. As próximas sessões contêm sugestões de como as ferramentas podem ser usadas para documentar outras interfaces, também.

### Opções de linha de comando e de páginas man

Já que também é possível gerar páginas man para um refentry do docbook, soa como uma boa ideia usá-lo para este propósito. Desta forma, a interface é parte da referência e é possível obter a página man de graça.

#### Documentar a ferramenta

Crie um arquivo refentry por ferramenta. Segundo nosso exemplo nós chamaríamos ele de `meep/docs/reference/meeper/meep.xml`. Para as tags xml que devem ser usadas e podem parecer no arquivo gerado no subdiretório xml assim como exemplos, por exemplo, em glib.

#### Adicionando a verificação extra ao configure

Verificações extra no configure

    AC_ARG_ENABLE(man,
                  [AC_HELP_STRING([--enable-man],
                                  [regenerate man pages from Docbook [default=no]])],enable_man=yes,
                  enable_man=no)

    AC_PATH_PROG([XSLTPROC], [xsltproc])
    AM_CONDITIONAL(ENABLE_MAN, test x$enable_man != xno)

#### Adicionando as regras extras ao makefile

Verificações extra no configure

    man_MANS = \
           meeper.1

    if ENABLE_GTK_DOC
    if ENABLE_MAN

    %.1 : %.xml
            @XSLTPROC@ -nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl $<

    endif
    endif

    BUILT_EXTRA_DIST = $(man_MANS)
    EXTRA_DIST += meep.xml

### Interfaces DBus

(CORRIJA-ME: http://hal.freedesktop.org/docs/DeviceKit/DeviceKit.html, http://cgit.freedesktop.org/DeviceKit/DeviceKit/tree/doc/dbus)

## Perguntas frequentes

Questão Resposta
- Sem hierarquia de classe. A função de objetos `xxx_get_type()` não foi inserida no arquivo `<pacote>.types`.
- Ainda sem hierarquia. Nomenclatura faltando ou incorreta no arquivo `<pacote>-sections.txt` (veja a explicação).
- Droga. Eu ainda não tenho hierarquia de classes. Por acaso o nome do objeto (nome da struct da instância, ex. GtkWidget) faz parte da seção normal (não coloque isso em subsções Standard ou Private)?
- Nenhum símbolo de índice. O `<pacote>-docs.{xml,sgml}` contém um índice que "xi:inclui" o índice gerado?
- Símbolos não estão vinculados ao seus doc-section. O doc-comment está usando a marcação correta (adicionado #,% or ())? Verifique se o gtkdoc-fixxref avisa sobre xrefs não resolvidos.
- Uma nova classe não aparece nos documentos. A nova página foi "xi:incluída" do `<pacote>-docs.{xml,sgml}`?
- Um novo símbolo não aparece nos documentos. O doc-comment está formatado adequadamente? Verifique erros de escrita no começo do comentário. Verifique se o gtkdoc-fixxref avisa sobre xrefs não resolvíveis. Verifique se o símbolo está listado corretamente no `<pacote>-sections.txt` em uma subseção pública.
- Um tipo está faltando da hierarquia de classe. If the type is listed in `<package>.hierarchy` but not in `xml/tree_index.sgml` then double check that the type is correctly placed in the `<package>-sections.txt`. If the type instance (e.g. GtkWidget) is not listed or incidentally marked private it will not be shown.
- Obtenho links de seguimento de documentos para todas as anotações gobject. Verifique se `xml/annotation-glossary.xml` está "xi:incluído" de `<pacote>-docs.{xml,sgml}`.
- Parâmetro descrito no bloco de comentário do código fonte não existe Verifique se o protótipo no cabeçalho tem nomes de parâmetros diferentes da fonte.
- Múltiplos "IDs" para restrições do fim do link XYZ O símbolo XYZ aparece duas vezes no arquivo `<pacote>-sections.txt`.
- Elemento typename no espaço de nome '' encontrado em para, mas nenhum modelo correspondeu.

## Ferramentas relacionadas ao gtk-doc

GtkDocPlugin - um plug-in de integração com Trac GTK-Doc, que adiciona documentos de API a um site trac e integra com a pesquisa do trac.

Gtkdoc-depscan - uma ferramenta (parte do gtk-doc) para verificar APIs usadas, a partir de suas tags, para determinar a versão mínima necessária.

Versão 1.1, Março de 2000
2000 Free Software Foundation, Inc.

    Free Software Foundation, Inc. 51 Franklin Street,
            Suite 330, Boston, MA
            02110-1301  USA

É permitido a qualquer um copiar e distribuir cópias exatas deste documento de licença, embora não seja permitido alterá-lo.

## Licença de Documentação Livre GNU

### 0. INTRODUÇÃO

O propósito desta Licença é fazer um manual, livro-texto, ou outro documento escrito livre em seu sentido de liberdade: para garantir a todos a liberdade efetiva de copiá-lo e redistribui-lo, com ou sem modificações, tanto comercialmente como não comercialmente. Em segundo lugar, esta Licença preserva ao autor e ao editor uma forma de obter crédito pelo seu trabalho, enquanto não é considerado responsável por modificações feitas por outros.

Esta licença é um tipo de copyleft, que significa que trabalhos derivados do documento precisam ser, por sua vez, livres no mesmo sentido. Ela complementa a Licença Pública Geral GNU (GNU General Public License), que é uma licença copyleft projetada para softwares livres.

Nós projetamos esta Licença a fim de ser utilizada em manuais de software livre, já que softwares livres precisam de documentações livres: um programa livre deveria vir com manuais que ofereçam as mesmas liberdades que o software proporciona. Mas esta Licença não é limitada a manuais de software; ela pode ser usada para qualquer trabalho de texto, independente do assunto ou se é publicado como um livro impresso. Nós recomendamos esta Licença principalmente para trabalhos cujo propósito seja instrução ou referência.

### 1. APLICABILIDADE E DEFINIÇÕES

Esta Licença se aplica a qualquer manual ou outro trabalho que contenha um aviso colocado pelo detentor dos direitos autorais dizendo que o documento pode ser distribuído sob os termos desta. O Documento, abaixo, refere-se a qualquer manual ou trabalho. Qualquer membro do público é um licenciado, e será referenciado como você.

Uma Versão Modificada do Documento significa qualquer trabalho contendo o Documento ou uma porção deste, seja uma cópia literal ou com modificações e/ou traduzido em outro idioma.

Uma Seção Secundária é um apêndice com nome ou uma seção inicial do Documento que trata exclusivamente da relação dos editores ou autores do Documento com seu assunto geral (ou temas relacionados) e não contém nada que possa estar diretamente dentro do assunto geral. (Por exemplo, se o Documento é em parte um livro-texto de matemática, uma Seção Secundária não pode explicar nada de matemática). Tal relação pode ser uma questão de conexão histórica com o assunto ou com temas relacionados, ou tratar de questões legais, comerciais, filosóficas, éticas ou políticas com relação a eles.

As Seções Invariantes são certas Seções Secundárias cujos títulos são designados como sendo de Seções Invariantes na nota que afirma que o Documento é publicado sob esta Licença.

Os Textos de Capa são certas passagens de texto curtas que são listadas, como Textos de Capa Frontal ou Texto de Contra Capa, na nota que afirma que o Documento é publicado sob esta Licença.

Uma cópia Transparente do Documento significa uma cópia legível por máquina, representada em um formato cuja especificação esteja disponível ao público geral e que cujo conteúdo possa ser visualizado e editado de forma clara e direta por editores de texto genéricos ou programas genéricos de desenho (para imagens compostas de pixels) ou para alguns dos editores de desenho amplamente disponíveis (para desenhos) e que seja apropriado para inclusão em formatadores de texto ou para a tradução automática em uma variedade de formatos apropriados de entrada em formatadores de texto. Uma cópia feita em outro formato de arquivo Transparente cuja marcação, ou ausência desta, tenha sido manipulada para impedir ou desencorajar modificação subsequente pelos leitores não é Transparente. Uma cópia que não é Transparente é chamada Opaca.

Exemplos de formatos apropriados para cópias Transparentes incluem ASCII puro sem marcação, formato de entrada Texinfo, formato de entrada LaTex, SGML ou XML usando um DTD publicamente disponível, e HTML simples em conformidade padrão projetado para modificação por humanos. Formatos Opacos incluem PostScript, PDF, formatos proprietários que podem ser lidos ou editados somente por processadores de texto proprietários, SGML ou XML cujos DTD e/ou ferramenta de processamento não estão largamente disponibilizados, e o HTML gerado por máquina produzido por algum processador de texto com propósito apenas de saída.

A Página de Título significa, para um livro impresso, a própria página do título, além das páginas subsequentes necessárias para conter, de forma legível, o material que esta Licença requer que apareça na página do título. Para trabalhos em formatos que não possuem qualquer página de título semelhante, Página de Título significa o texto próximo à ocorrência mais proeminente do título do trabalho, precedendo o início do corpo do texto.

### 2. CÓPIA ESCRITA

Você pode copiar e distribuir o Documento em qualquer meio, seja este de forma comercial ou não, desde que esta licença, as notas de direitos autorais (copyright), e a nota de licença afirmando que esta Licença se aplica ao Documento sejam reproduzidas em todas as cópias, e que você não inclua outras condições, quaisquer que sejam, às condições desta Licença. Você não pode usar de medidas técnicas para obstruir ou controlar a leitura ou cópia futura das cópias que você fizer ou distribuir. Contudo, você pode aceitar compensação em troca das cópias. Se você distribuir um número suficientemente grande de cópias, você deve também respeitar as condições descritas na seção 3.

Você também pode emprestar cópias, sob as mesmas condições relacionadas acima, e você pode publicamente exibir cópias.

### 3. COPIANDO EM QUANTIDADE

Se você publicar cópias impressas do Documento, em número maior que 100, e a nota de licença do Documento exigir Textos de Capa, você deve encadernar as cópias em capas que carreguem, de forma clara e legível, todos estes Textos de Capa: Textos de Capa Frontal na capa frontal e Textos de Contracapa na contracapa. Ambas as capas devem também identificar, de forma clara e legível, você como o editor das cópias. A capa frontal deve apresentar o título completo com todas as palavras deste igualmente proeminentes e visíveis. Além disso, você pode adicionar outro material nas capas. As cópias com mudanças limitadas às capas, desde que preservem o título do Documento e satisfaçam estas condições podem ser tratadas como cópias literais em outros aspectos.

Se os textos necessários a qualquer uma das capas forem muito volumosos para serem incluídos de forma legível, você deve colocar os primeiros textos listados (quantos couberem razoavelmente) na própria capa, e continuar o resto em páginas adjacentes.

Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você deve incluir uma cópia Transparente legível por máquina juntamente com cada cópia Opaca, ou dizer em (ou juntamente com) cada cópia Opaca, um endereço de rede a partir do qual o público geral de usuários possam acessar e obter de forma anônima e sob nenhum custo, usando protocolos de rede públicos padrão, uma cópia Transparente completa do Documento, livre de materiais adicionados. Se você decidir pela segunda opção, você deve seguir passos com certa prudência ao começar a distribuir as cópias Opacas em quantidade, a fim de garantir que esta cópia transparente permanecerá acessível no local indicado por pelo menos um ano após a última vez que você distribuir uma cópia Opaca (diretamente ou através de seus agentes ou distribuidores) desta edição ao público.

É solicitado, mas não exigido, que você contate os autores do Documento muito antes de redistribuir qualquer grande número de cópias, para dar a eles uma chance de lhe fornecer uma versão atualizada do Documento.

### 4. MODIFICAÇÕES

Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das seções 2 e 3 acima, desde que você forneça a Versão Modificada estritamente sob esta Licença, com a Versão Modificada preenchendo a função de Documento, permitindo assim a distribuição e modificação da Versão Modificada a quem quer que possua uma cópia desta. Além disso, você deve executar os seguintes procedimentos na Versão Modificada:

- A

  Usar na Página de Título (e nas capas, se existirem) um título distinto em relação ao do Documento, e daqueles de versões anteriores (os quais devem, na existência de algum, ser listados na seção "Histórico" do Documento). Você pode usar o mesmo título de uma versão anterior se o editor original daquela versão conceder-lhe permissão.

- B

  Listar na Página de Título como autores, uma ou mais pessoas ou entidades responsáveis pela autoria das modificações na Versão Modificada, juntamente com pelo menos cinco autores principais do Documento (todos seus autores principais, se houver menos que cinco).

- C

  Declarar na Página de Título o nome do editor da Versão Modificada, como seu editor.

- D

  Preservar todas as notas de direitos autorais (copyright) do Documento.

- E

  Adicionar uma nota apropriada de direitos autorais para suas modificações, adjacente às outras notas de direitos autorais.

- F

  Incluir, imediatamente após as notas de direitos autorais, uma nota de licença concedendo permissão pública para o uso da Versão Modificada sob os termos desta Licença, na forma mostrada no Adendo abaixo.

- G

  Preservar na referida nota de licença a lista completa de Seções Invariantes e Textos de Capa obrigatórios, dados na nota de licença do Documento.

- H

  Inclua uma cópia inalterada desta Licença.

- I

  Preservar a seção intitulada Histórico, preservar seu título, e adicionar a esta um item declarando ao menos o título, o ano, novos autores, e o editor da Versão Modificada conforme incluído na Página de Título. Se nenhuma seção intitulada Histórico estiver presente no Documento, crie uma informando o título, o ano, os autores e o editor do Documento como evidenciado na Página de Título, em seguida adicione um item descrevendo a Versão Modificada como mencionado na sentença anterior.

- J

  Preservar o endereço de rede, se existir algum, informado pelo Documento para acesso público a uma cópia Transparente deste e, da mesma maneira, os endereços de rede dados no Documento para versões anteriores nas quais este se baseia. Estes podem ser colocados na seção Histórico. Você pode omitir um endereço de rede para um trabalho que foi publicado pelo menos quatro anos antes do Documento em si, ou se o editor original da versão à qual o endereço se refere der permissão.

- K

  Preservar o título da seção para qualquer seção intitulada Agradecimentos ou Dedicatórias e preservar dentro da seção toda a substância e tom de cada um dos agradecimentos e/ou dedicatórias lá mencionados.

- L

  Preservar todas as Seções Invariantes do Documento, sem alterações em seus textos e títulos. Números de seção ou o equivalente não são considerados parte dos títulos das seções.

- M

  Apagar qualquer seção intitulada Apoio. Tal seção não deve ser incluída na Versão Modificada.

- N

  Não renomear o título de qualquer seção existente como Apoio ou que resulte em conflito com o título de qualquer Seção Invariante.

Se a Versão Modificada incluir novas seções iniciais ou apêndices que sejam qualificados como Seções Secundárias, e não contiver material copiado do Documento, você pode, a seu critério, tornar algumas dessas ou todas essas seções em invariantes. Para fazer isso, adicione seus títulos à lista de Seções Invariantes na nota de licença da Versão Modificada. Estes títulos devem ser distintos de quaisquer outros títulos de seções.

Você pode incluir uma seção intitulada Apoio, desde que esta contenha apenas apoios recebidos limitados a sua Versão Modificada por várias fontes -- por exemplo, notas do revisor ou de que o texto foi aprovado por uma organização como a definição oficial de um padrão.

Você pode adicionar uma passagem de até cinco palavras como Texto de Capa Frontal, e uma passagem de até 25 palavras como Texto de Contracapa, ao fim da lista de Textos de Capa na Versão Modificada. Somente uma passagem de Texto de Capa Frontal e uma de Texto de Contracapa podem ser adicionados por (ou através de arranjos feitos por) uma entidade qualquer. Caso o Documento já incluir um texto de capa para a mesma capa, previamente incluído por você ou pelo arranjo feito pela mesma entidade em cujo nome você está agindo, você não poderá adicionar outro; mas você poderá substituir o antigo, com a permissão explícita do editor anterior, que o incluiu.

O(s) autor(es) e editor(es) do Documento, por esta Licença, não concedem permissão para que seus nomes sejam usados a fins de publicidade, para defesa ou para apoio implícito de qualquer Versão Modificada.

### 5. COMBINANDO DOCUMENTOS

Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob os termos definidos na seção 4 acima para versões modificadas, desde que você inclua na combinação todas as Seções Invariantes de todos os documentos originais, sem modificações, e as liste como Seções Invariantes de seu trabalho combinado, na sua nota de licença.

O trabalho combinado precisa conter somente uma cópia desta Licença, e várias Seções Invariantes idênticas podem ser substituídas por uma única cópia. Se existirem várias Seções Invariantes de mesmo nome, porém com conteúdos diferentes, você deve tornar o título de cada uma destas seções único, adicionando ao fim destes, entre parênteses, o nome do autor ou, se conhecido, o editor original desta seção, ou ainda um número único. Faça o mesmo ajuste nos títulos de seção na lista de Seções Invariantes na nota de licença do trabalho combinado.

Na combinação, você deve combinar quaisquer seções intituladas Histórico nos vários documentos originais, formando uma seção intitulada Histórico; do mesmo modo, combine quaisquer seções intituladas Agradecimentos, e quaisquer seções intituladas Dedicatórias. Você deve apagar todas as seções intituladas Apoio.

### 6. COLEÇÕES DE DOCUMENTOS

Você pode fazer uma coleção que consiste do Documento e outros documentos publicados sob esta Licença, e substituir as cópias individuais desta Licença, nos vários documentos, por uma única cópia a ser incluída na coleção, desde que você siga as regras desta Licença para cópias literais de cada documento em todos os outros aspectos.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

### 7. AGREGAÇÃO COM TRABALHOS INDEPENDENTES

Uma compilação do Documento ou seus derivados com outros documentos ou trabalhos separados e independentes, dentro de ou sob um volume de um meio de armazenamento ou distribuição, não conta como um todo para uma Versão Modificada do Documento, contanto que nenhum direito autoral de compilação seja reivindicado para esta compilação. Tal compilação configura um agregado e esta Licença não se aplica aos outros trabalhos contidos na compilação do Documento, levando em conta serem compilados, caso eles mesmos não forem trabalhos derivados do Documento. Se o requisito de Texto da Capa da seção 3 é aplicável a estas cópias do Documento, e ainda se o Documento é menor do que um quarto do agregado inteiro, os Textos de Capa do Documento podem ser inseridos nas capas que envolvem somente o Documento no agregado. Caso contrário, eles devem aparecer em capas em volta do agregado como um todo.

### 8. TRADUÇÃO

Uma tradução é considerada como sendo um tipo de modificação, desta forma você pode distribuir traduções do Documento sob os termos da seção 4. A substituição das Seções Invariantes por traduções requer permissão especial dos detentores dos direitos autorais, embora você possa incluir traduções de algumas ou todas as Seções Invariantes juntamente às versões originais destas. Você pode incluir uma tradução desta Licença, desde que você também inclua a versão original em Inglês desta Licença. Em caso de discordância entre a tradução e a versão original desta Licença ou nota de licença, a versão original em inglês prevalecerá.

### 9. TÉRMINO

Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento com exceção do que foi expressamente previsto sob esta Licença. Qualquer outra tentativa de cópia, modificação, sublicenciamento ou distribuição do Documento é nula, e implicará na rescisão automática de seus direitos sob esta Licença. Contudo, as partes que receberam as cópias, ou direitos, de você sob esta Licença não terão suas licenças rescindidas enquanto tais partes permanecerem em total acordo com a Licença.

### 10. FUTURAS REVISÕES DESTA LICENÇA

A Free Software Foundation pode publicar novas versões, revisadas, da Licença de Documentação Livre GNU de tempos em tempos. Tais versões posteriores terão ideologia similar à presente versão, embora possam diferir em detalhes a fim de abordar novos problemas ou preocupações. Consulte: http://www.gnu.org/copyleft/.

É dado, a cada versão da Licença, um número de versão distinto. Se o Documento especificar que um número de versão em específico desta Licença ou qualquer versão posterior se aplica a ele, você tem a opção de seguir os termos e condições tanto da versão especificada quanto de qualquer versão posterior que tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o documento não especificar um número de versão desta Licença, você pode escolher qualquer versão já publicada (não como rascunho) pela Free Software Foundation.

### Adendo

Para usar esta Licença em um documento que você escreveu, inclua uma cópia desta no documento e adicione as seguintes notas de direitos autorais e licença logo após a página de título:

> Copyright ANO SEU NOME.

> Permissão concedida para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU (GNU Free Documentation License), Versão 1.1 ou qualquer versão mais recente publicada pela Free Software Foundation; com as Seções Invariantes, sendo LISTADO SEUS TÍTULOS, com os Textos de Capa Frontal sendo LISTADOS, e com os Textos de Contracapa sendo LISTADOS. Uma cópia da licença está inclusa na seção entitulada Licença de Documentação Livre GNU (GNU Free Documentation License).

Se você não tiver qualquer Seção Invariante, escreva sem Seções Invariantes ao invés de afirmar quais são invariantes. Se você não tem Textos de Capa Frontal, escreva sem Textos de Capa Frontal ao invés de Textos de Capa Frontal sendo LISTADOS; O mesmo se aplica a Textos de Contracapa.

Se seu documento contiver exemplos não-triviais de código de programação, recomendamos publicar estes exemplos paralelamente, sob a licença de software livre que você escolher, como por exemplo a Licença Pública Geral GNU (GNU General Public License), para permitir seu uso em software livre.