Blame programming-guidelines/cs/documentation.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2003/XInclude" type="topic" id="documentation" xml:lang="cs">
Packit 1470ea
Packit 1470ea
  <info>
Packit 1470ea
    <link type="guide" xref="index#general-guidelines"/>
Packit 1470ea
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Federico Mena-Quintero</name>
Packit 1470ea
      <email its:translate="no">federico@gnome.org</email>
Packit 1470ea
      <years>2013</years>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Philip Withnall</name>
Packit 1470ea
      <email its:translate="no">philip.withnall@collabora.co.uk</email>
Packit 1470ea
      <years>2015</years>
Packit 1470ea
    </credit>
Packit 1470ea
    <credit type="author copyright">
Packit 1470ea
      <name>Tým GTK+</name>
Packit 1470ea
    </credit>
Packit 1470ea
Packit 1470ea
    <include xmlns="http://www.w3.org/2001/XInclude" href="cc-by-sa-3-0.xml"/>
Packit 1470ea
Packit 1470ea
    <desc>Doplnění dokumentace ke knihovnám a k API</desc>
Packit 1470ea
  </info>
Packit 1470ea
Packit 1470ea
  <title>Dokumentace</title>
Packit 1470ea
Packit 1470ea
  <synopsis>
Packit 1470ea
    <title>Shrnutí</title>
Packit 1470ea
Packit 1470ea
    <list>
Packit 1470ea
      <item>

Pro dokumentaci API používejte gtk-doc s nastavením pro udržování aktuální podoby. (<link xref="#gtk-doc"/>)

</item>
Packit 1470ea
      <item>

Používejte prvky XML pro zahrnutí externích symbolů do dokumentace. (<link xref="#build-system"/>)

</item>
Packit 1470ea
      <item>

Používejte jednotný standardní obsah ve všech dokumentacích k API, aby šla udržovat podle běžných zvyklostí. (<link xref="#standard-layout"/>)

</item>
Packit 1470ea
      <item>

Používejte <cmd>gdbus-codegen</cmd> k vygenerování dokumentace k API pro D-Bus, která se zahrne do sestavení gtk-doc. (<link xref="#dbus-api"/>)

</item>
Packit 1470ea
      <item>

Do veškeré dokumentace k API přidejte anotace k introspekci. (<link xref="#introspection-annotations"/>)

</item>
Packit 1470ea
      <item>

Do všech dokumentací k API doplňte řádky Since. (<link xref="#symbol-versioning"/>)

</item>
Packit 1470ea
      <item>

Povolte testy gtk-doc. (<link xref="#keeping-up-to-date"/>)

</item>
Packit 1470ea
    </list>
Packit 1470ea
  </synopsis>
Packit 1470ea
Packit 1470ea
  <section id="gtk-doc">
Packit 1470ea
    <title>gtk-doc</title>
Packit 1470ea
Packit 1470ea
    

Upřednostňovaným systémem pro dokumentovaní knihoven GNOME je <link href="http://www.gtk.org/gtk-doc/">gtk-doc</link>, který získává vložené komentáře z kódu, aby z nich sestavil dokument <link href="http://docbook.org/">DocBook</link> a sadu stránek HTML. Ty je pak možné číst v aplikaci <link href="https://wiki.gnome.org/Apps/Devhelp">Devhelp</link>. Velká část infrastruktury GNOME je postavena tak, aby pracoval s dokumentací napsanou pomocí gtk-doc.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="build-system">
Packit 1470ea
    <title>Systém sestavení</title>
Packit 1470ea
Packit 1470ea
    

Při začleňování gtk-doc do systému sestavení u projektu <link href="https://developer.gnome.org/gtk-doc-manual/stable/settingup.html.en">se řiďte instrukcemi v příručce k gtk-doc</link>. Přípomínáme, že soubor <file>sections.txt</file> je sice vygenerován automaticky, ale jen při prvním spuštění gtk-doc. Následně již generován není a musí být udržován ručně. Proto by měl být také <link href="https://developer.gnome.org/gtk-doc-manual/stable/settingup_vcs.html.en">v systému pro správu verzí</link>.

Packit 1470ea
Packit 1470ea
    

Měli byste používat variantu gtk-doc no-tmpl a režim XML namísto SGML. (Režim tmpl a SGML jsou zastaralé a pomalejší než XML.)

Packit 1470ea
    

Když je zapotřebí vložit číslo balíčku do textu dokumentace, vytvořte soubor s názvem <file>docs/version.xml.in</file>, který bude obsahovat:

Packit 1470ea
    @PACKAGE_VERSION@
Packit 1470ea
    

Přidejte jej do AC_CONFIG_FILES v <file>configure.ac</file> a pak jej vložte do hlavního souboru dokumentace (<file>*-docs.xml</file>) pomocí: <!ENTITY version SYSTEM "version.xml"> v DOCTYPE na začátku dokumentu. Verzi balíčku pak můžete vkládat pomocí &version;.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="standard-layout">
Packit 1470ea
    <title>Standardní uspořádání</title>
Packit 1470ea
Packit 1470ea
    

Použití standardního uspořádání pro obsah, oddíly, dodatky atd. znamená, že stejnou šablonu <file>název-projektu-docs.xml</file> můžete znovu použít s minimálními změnami pro různé projekty. A rovněž to znamená, že uspořádání dokumentace bude obdobné napříč všemi projekty, takže se v ní vývojáři budou lépe orientovat.

Packit 1470ea
Packit 1470ea
    

Je doporučováno následující uspořádání:

Packit 1470ea
    <listing>
Packit 1470ea
      <title><file>název-projektu-docs.xml</file></title>
Packit 1470ea
      <desc>Soubor gtk-doc s šablonou nejvyšší úrovně pro projekt</desc>
Packit 1470ea
      <xi:include href="example-docs.xml" parse="text"/>
Packit 1470ea
    </listing>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="licensing">
Packit 1470ea
    <title>Licencování</title>
Packit 1470ea
    

Je důležité, aby licence použitá pro referenční příručku k API, byla čistá, hlavně když je součástí dokumentace i ukázkový kód, který je možné kopírovat.

Packit 1470ea
Packit 1470ea
    

Typicky používá projekt pro svoji referenční příručku tu stejnou licenci, jako pro vlastní kód projektu, aby se předešlo nejasnostem. Některé projekty zase používají pro veškerou svoji dokumentaci CC-BY-SA 3.0. Volba je čistě na vás.

Packit 1470ea
Packit 1470ea
    

Jak je ukázáno ve <link xref="#standard-layout">Standardním uspořádání</link>, měli byste do souboru gtk-doc DocBook nejvyšší úrovně vložit <file>licence.xml</file>, který poskytne úplný text licence vaší dokumentace.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="public-api">
Packit 1470ea
    <title>Veřejná API</title>
Packit 1470ea
Packit 1470ea
    

Veškerá veřejná API musí mít komentáře gtk-doc. Pro funkce by měly být umístěny ve zdrojovém souboru, přímo nad funkcí.

Packit 1470ea
Packit 1470ea
    /**
Packit 1470ea
 * gtk_get_flow:
Packit 1470ea
 * @widget: a #GtkWidget
Packit 1470ea
 *
Packit 1470ea
 * Gets the flow of a widget.
Packit 1470ea
 *
Packit 1470ea
 * Note that flows may be laminar or turbulent...
Packit 1470ea
 *
Packit 1470ea
 * Returns: (transfer none): the flow of @widget
Packit 1470ea
 */
Packit 1470ea
GtkFlow *
Packit 1470ea
gtk_get_flow (GtkWidget *widget)
Packit 1470ea
{
Packit 1470ea
Packit 1470ea
  ...
Packit 1470ea
Packit 1470ea
}
Packit 1470ea
Packit 1470ea
    

Dokumentační komentáře pro makra, typy funkcí, struktury tříd atd. by měly být umístěny vedle definici, typicky v hlavičkových souborech.

Packit 1470ea
Packit 1470ea
    

Úvody k jednotlivým oddílům by měly být umístěné ve zdrojových souborech, které popisují, za hlavičkou s licencí:

Packit 1470ea
Packit 1470ea
    /**
Packit 1470ea
 * SECTION:gtksizerequest
Packit 1470ea
 * @Short_Description: Height-for-width geometry management
Packit 1470ea
 * @Title: GtkSizeRequest
Packit 1470ea
 *
Packit 1470ea
 * The GtkSizeRequest interface is GTK+'s height-for-width (and
Packit 1470ea
 * width-for-height) geometry management system.
Packit 1470ea
 * ...
Packit 1470ea
 */
Packit 1470ea
Packit 1470ea
    

Mějte na paměti, že aby se funkce, makro, typ funkce nebo typ struktura byly součástí, je zapotřebí je uvést v souboru <file>modulename-sections.txt</file> vaší dokumentace.

Packit 1470ea
Packit 1470ea
    

Správné zdokumentování nové třídy vyžaduje poskytnutí jejího vlastního oddílu v <file>modulename-sections.txt</file>, musí být vložená v vašem <file>modulename-docs.sgml</file> nejvyšší úrovně a funkce get_type() pro vaši třídu musí být uvedená v <file>modulename.types</file>.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="introspection-annotations">
Packit 1470ea
    <title>Poznámky k introspekci</title>
Packit 1470ea
Packit 1470ea
    

Každý komentář gtk-doc by měl mít příslušné <link href="https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations">anotace k introspekci GObject</link>. To je užitečné ze dvou důvodů:

Packit 1470ea
    <list type="numbered">
Packit 1470ea
      <item>

Přidá to důležitou informaci o typech parametrů, možných prázdných hodnotách a správě paměti do dokumentace k API C vygenerované pomocí gtk-doc.

</item>
Packit 1470ea
      <item>

Umožní to veřejným API navázat se automaticky na další jazyky, jako třeba Python nebo JavaScript.

</item>
Packit 1470ea
    </list>
Packit 1470ea
Packit 1470ea
    

Anotace k introspekci přidává do API (funkce, parametry funkcí, návratové hodnoty funkcí, struktury, vlastnosti GObject, signály GObject) informace, které ve strojově čitelné podobě API v C nejsou jinak dostupné a existují jen ve formě čitelné člověkem v dokumentaci nebo jako zvyklosti. Proto jsou velmi důležité.

Packit 1470ea
Packit 1470ea
    

V komentářích gtk-doc by se měla dávat přednost anotacím před variantou čitelnou pro člověka. Například, když dokumentujete parametr funkce, který může nabývat hodnoty NULL, použijte namísto nějakého textu raději anotaci (nullable):

Packit 1470ea
    /**
Packit 1470ea
 * my_function:
Packit 1470ea
 * @parameter: (nullable): some parameter which affects something
Packit 1470ea
 *
Packit 1470ea
 * Body of the function documentation.
Packit 1470ea
 */
Packit 1470ea
Packit 1470ea
    

Použijte namísto:

Packit 1470ea
    /**
Packit 1470ea
 * my_bad_function:
Packit 1470ea
 * @parameter: some parameter which affects something, or %NULL to ignore
Packit 1470ea
 *
Packit 1470ea
 * Bad body of the function documentation.
Packit 1470ea
 */
Packit 1470ea
Packit 1470ea
    

Více informací k introspekci najdete v <link xref="introspection">pokynech k introspekci</link>.

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="symbol-versioning">
Packit 1470ea
    <title>Číslování verzí symbolů</title>
Packit 1470ea
Packit 1470ea
    

Kdykoliv je do veřejného API přidán nějaký symbol, měl by pro něj být přidán i dokumentační komentář. Ten by měl vždy obsahovat řádek Since s číslem verze vydání balíčku, který poprvé obsahuje nové API. Mělo by se jednat o číslo verze, které se právě nachází v <file>configure.ac</file>, za předpokladu, že používáte <link xref="versioning#release-process">zvyšování čísla verze po vydání</link>.

Packit 1470ea
Packit 1470ea
    

Například:

Packit 1470ea
    /**
Packit 1470ea
 * my_function:
Packit 1470ea
 * @param: some parameter
Packit 1470ea
 *
Packit 1470ea
 * Body of the function documentation.
Packit 1470ea
 *
Packit 1470ea
 * Since: 0.5.0
Packit 1470ea
 */
Packit 1470ea
Packit 1470ea
    

gtk-doc používá tyto informace k vygenerování rejstříku API přidaných v jednotlivých vydáních. Do <file>*-docs.xml</file> by jako dodatek mělo být přidáno následující:

Packit 1470ea
    <part>
Packit 1470ea
	<title>Appendices</title>
Packit 1470ea
	<index id="api-index-full">
Packit 1470ea
		<title>API Index</title>
Packit 1470ea
		<xi:include href="xml/api-index-full.xml"><xi:fallback/></xi:include>
Packit 1470ea
	</index>
Packit 1470ea
	<index id="api-index-deprecated">
Packit 1470ea
		<title>Index of deprecated symbols</title>
Packit 1470ea
		<xi:include href="xml/api-index-deprecated.xml"><xi:fallback/></xi:include>
Packit 1470ea
	</index>
Packit 1470ea
	<index role="0.1.0">
Packit 1470ea
		<title>Index of new symbols in 0.1.0</title>
Packit 1470ea
		<xi:include href="xml/api-index-0.1.0.xml"><xi:fallback/></xi:include>
Packit 1470ea
	</index>
Packit 1470ea
	<!-- More versions here. -->
Packit 1470ea
	<xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
Packit 1470ea
</part>
Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="dbus-api">
Packit 1470ea
    <title>API pro D-Bus</title>
Packit 1470ea
Packit 1470ea
    

Popisy rozhraní D-Bus obsahují dokumentační komentáře a ty je možné získat z XML pomocí <cmd>gdbus-codegen</cmd> a nasměrovat do souborů DocBook, aby byly začleněny pomocí gtk-doc.

Packit 1470ea
Packit 1470ea
    

Soubory DocBook mohou být vloženy do souboru <file>*-docs.xml</file> pomocí:

Packit 1470ea
    <chapter>
Packit 1470ea
  <title>C Interfaces</title>
Packit 1470ea
  <partintro>
Packit 1470ea
    <para>C wrappers for the D-Bus interfaces.</para>
Packit 1470ea
  </partintro>
Packit 1470ea
Packit 1470ea
  <xi:include href="xml/SomeDBusService.xml"/>
Packit 1470ea
  <xi:include href="xml/SomeOtherService.xml"/>
Packit 1470ea
</chapter>
Packit 1470ea
Packit 1470ea
    

Vygenerované soubory XML musí být zahrnuté v proměnné content_files ve vašem <file>Makefile.am</file> pro gtk-doc, jinak sestavení selže. (Je to kvůli nápravě situací, kdy složka builddir není shodná se srcdir.)

Packit 1470ea
  </section>
Packit 1470ea
Packit 1470ea
  <section id="keeping-up-to-date">
Packit 1470ea
    <title>Udržování dokumentace v aktuálním stavu</title>
Packit 1470ea
Packit 1470ea
    

gtk-doc obsahuje podporu pro kontrolu dokumentace pomocí pár základních testů. Mimo jiných věcí se zkontroluje, jestli jsou všechny verze indexů vložené v hlavním souboru <file>*-docs.xml</file> a jestli jsou zdokumentované všechny symboly.

Packit 1470ea
Packit 1470ea
    

Tyto testy by měly být vždy povolené přidáním následujícího do <file>Makefile.am</file> pro váš gtk-doc:

Packit 1470ea
    TESTS = $(GTKDOC_CHECK)
Packit 1470ea
Packit 1470ea
    

Budou pak spouštěny jako součást <cmd>make check</cmd>.

Packit 1470ea
  </section>
Packit 1470ea
</page>