summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorStef Walter <stefw@redhat.com>2013-04-09 15:26:35 +0200
committerStef Walter <stefw@redhat.com>2013-04-09 15:29:03 +0200
commit030126689753052daa5323337c765a8b496ecb9a (patch)
tree6c58cf5efb4afd0ad4e99394f78d6ba83643f8ff /doc
parent3fb917556b5e2ad38b5bfbafbcf2f3b60ce90f46 (diff)
Add manual page for adcli and documentation infrastructure
Diffstat (limited to 'doc')
-rw-r--r--doc/Makefile.am68
-rw-r--r--doc/adcli-docs.xml21
-rw-r--r--doc/adcli.xml529
-rw-r--r--doc/gtk-doc.xsl897
-rw-r--r--doc/static/gtk-doc.css264
-rw-r--r--doc/static/home.pngbin0 -> 654 bytes
-rw-r--r--doc/static/left.pngbin0 -> 459 bytes
-rw-r--r--doc/static/right.pngbin0 -> 472 bytes
-rw-r--r--doc/static/style.css114
-rw-r--r--doc/static/up.pngbin0 -> 406 bytes
-rw-r--r--doc/version-greater-or-equal.xsl54
11 files changed, 1947 insertions, 0 deletions
diff --git a/doc/Makefile.am b/doc/Makefile.am
new file mode 100644
index 0000000..8943583
--- /dev/null
+++ b/doc/Makefile.am
@@ -0,0 +1,68 @@
+include $(top_srcdir)/Makefile.decl
+
+man8_MANS = \
+ adcli.8 \
+ $(NULL)
+
+MAN_IN_FILES = \
+ $(man8_MANS:.8=.xml)
+
+DOCBOOK_FILE = adcli-docs.xml
+
+CONTENT_INCLUDES = \
+ $(NULL)
+
+STATIC_FILES = \
+ static/gtk-doc.css \
+ static/style.css \
+ $(NULL)
+
+XSLT_FILES = \
+ gtk-doc.xsl \
+ version-greater-or-equal.xsl \
+ $(NULL)
+
+EXTRA_DIST = \
+ $(DOCBOOK_FILE) \
+ $(CONTENT_INCLUDES) \
+ $(MAN_IN_FILES) \
+ $(XSLT_FILES) \
+ static \
+ version.xml.in \
+ version.xml \
+ $(NULL)
+
+CLEANFILES = \
+ $(man8_MANS) \
+ $(NULL)
+
+XSLTPROC_FLAGS = \
+ --nonet \
+ --stringparam man.output.quietly 1 \
+ --stringparam funcsynopsis.style ansi \
+ --stringparam man.th.extra1.suppress 1 \
+ --stringparam man.authors.section.enabled 0 \
+ --stringparam man.copyright.section.enabled 0
+
+XSLTPROC_MAN = \
+ $(XSLTPROC) $(XSLTPROC_FLAGS) http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl
+
+.xml.8:
+ $(AM_V_GEN) $(XSLTPROC_MAN) $<
+
+$(builddir)/html/index.html: $(DOCBOOK_FILE) $(CONTENT_INCLUDES) $(MAN_IN_FILES) $(STATIC_FILES)
+ $(AM_V_GEN) mkdir -p $(builddir)/html && cp $(srcdir)/static/* $(builddir)/html/
+ $(AM_V_GEN) $(XMLTO) html -m $(srcdir)/gtk-doc.xsl -o $(builddir)/html \
+ --searchpath $(builddir):$(srcdir) $(srcdir)/$(DOCBOOK_FILE)
+
+all-local: $(builddir)/html/index.html
+
+clean-local:
+ @rm -rf *.tmp $(builddir)/html
+
+install-data-local:
+ $(MKDIR_P) $(DESTDIR)$(htmldir)
+ $(INSTALL_DATA) $(builddir)/html/* $(DESTDIR)$(htmldir)
+
+uninstall-local:
+ rm -rf $(DESTDIR)$(htmldir)
diff --git a/doc/adcli-docs.xml b/doc/adcli-docs.xml
new file mode 100644
index 0000000..83ffcc2
--- /dev/null
+++ b/doc/adcli-docs.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+ <!ENTITY % local.common.attrib "xmlns:xi CDATA #FIXED 'http://www.w3.org/2003/XInclude'">
+ <!ENTITY version SYSTEM "version.xml">
+]>
+<book id="index">
+ <bookinfo>
+ <title>adcli</title>
+ <releaseinfo>for &version;</releaseinfo>
+ </bookinfo>
+
+ <part id="guide">
+ <title>User Guide</title>
+ <chapter id="adcli-manual">
+ <title>Manual pages</title>
+ <xi:include href="adcli.xml"/>
+ </chapter>
+ </part>
+</book>
diff --git a/doc/adcli.xml b/doc/adcli.xml
new file mode 100644
index 0000000..f01ad27
--- /dev/null
+++ b/doc/adcli.xml
@@ -0,0 +1,529 @@
+<?xml version='1.0'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+ "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+
+<refentry id="adcli">
+
+<refentryinfo>
+ <title>adcli</title>
+ <productname>realmd</productname>
+ <authorgroup>
+ <author>
+ <contrib>Maintainer</contrib>
+ <firstname>Stef</firstname>
+ <surname>Walter</surname>
+ <email>stefw@redhat.com</email>
+ </author>
+ </authorgroup>
+</refentryinfo>
+
+<refmeta>
+ <refentrytitle>adcli</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="manual">System Commands</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>adcli</refname>
+ <refpurpose>Tool for performing actions on an Active Directory domain</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>adcli info</command>
+ <arg choice="plain">domain.example.com</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli join</command>
+ <arg choice="plain">domain.example.com</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli create-user</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain">user</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli delete-user</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain">user</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli create-group</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain">user</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli delete-group</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain">user</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli add-member</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain">group</arg>
+ <arg choice="plain" rep="repeat">user</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli remove-member</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain">group</arg>
+ <arg choice="plain" rep="repeat">user</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli preset-computer</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain" rep="repeat">computer</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli reset-computer</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain">computer</arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>adcli delete-computer</command>
+ <arg choice="opt">--domain=domain.example.com</arg>
+ <arg choice="plain">computer</arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+<refsect1>
+ <title>Description</title>
+ <para><command>adcli</command> is a command line tool that
+ can perform actions in an Active Directory domain. Among other things
+ it can be used to join a computer to a domain.</para>
+
+ <para>See the various sub commands below. The following global options
+ can be used:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-D, --domain=<parameter>domain</parameter></option></term>
+ <listitem><para>The domain to connect to. If a domain is
+ not specified then the domain part of the local computer's
+ host name is used.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-R, --domain-realm=<parameter>REALM</parameter></option></term>
+ <listitem><para>Kerberos realm for the domain. If not
+ specified then the upper cased domain name is
+ used.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-S, --domain-controller=<parameter>server</parameter></option></term>
+ <listitem><para>Connect to a specific domain controller.
+ If not specified then an appropriate domain controller
+ is automatically discovered.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-C, --login-ccache=<parameter>/path/to/file</parameter></option></term>
+ <listitem><para>Use the specified kerberos credential
+ cache to authenticate with the domain.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-U, --login-user=<parameter>User</parameter></option></term>
+ <listitem><para>Use the specified user account to
+ authenticate with the domain. If not specified then
+ the name 'Administrator' will be used.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--no-password</option></term>
+ <listitem><para>Don't show prompts for or read a
+ password from input.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-W, --prompt-password</option></term>
+ <listitem><para>Prompt for a password if necessary.
+ This is the default.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--stdin-password</option></term>
+ <listitem><para>Read a password from stdin input instead
+ of prompting for a password.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-v, --verbose</option></term>
+ <listitem><para>Run in verbose mode with debug
+ output.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+</refsect1>
+
+<refsect1>
+ <title>Querying Domain Information</title>
+
+ <para><command>adcli info</command> displays discovered information
+ about an Active Directory domain or an Active Directory domain
+ controller.</para>
+
+<programlisting>
+$ adcli info domain.example.com
+...
+</programlisting>
+
+<programlisting>
+$ adcli info --domain-controller=dc.domain.example.com
+...
+</programlisting>
+
+ <para><command>adcli info</command> will output as much information as
+ it can about the domain. The information is designed to be both machine
+ and human readable. The command will exit with a non-zero exit code
+ if the domain does note exist or cannot be reached.</para>
+
+ <para>To show domain info for a specific domain controller use the
+ <option>--domain-controller</option> option to specify which domain
+ controller to query.</para>
+
+ <para>Use the <option>--verbose</option> option to show details of how
+ the domain is discovered and queried. Many of the global options, in
+ particular authentication options, are not usable with the
+ <command>adcli info</command> command.</para>
+</refsect1>
+
+<refsect1>
+ <title>Joining the Local Machine to a Domain</title>
+
+ <para><command>adcli join</command> creates a computer account in the
+ domain for the local machine, and sets up a keytab for the machine.
+ It does not configure an authentication service (such as
+ <command>sssd</command>).</para>
+
+<programlisting>
+$ adcli join domain.example.com
+Password for Administrator:
+</programlisting>
+
+ <para>In addition to the global options, you can specify the following
+ options to control how this operation is done.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-N, --computer-name=<parameter>computer</parameter></option></term>
+ <listitem><para>The short non-dotted name of the computer
+ account that will be created in the domain. If not specified
+ then the first portion of the <option>--host-fqdn</option>
+ is used.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-O, --domain-ou=<parameter>OU=xxx</parameter></option></term>
+ <listitem><para>The full distinguished name of the OU in
+ which to create the computer account. If not specified
+ then the computer account will be created in a default
+ location.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-H, --host-fqdn=<parameter>host</parameter></option></term>
+ <listitem><para>Override the local machine's fully qualified
+ domain name. If not specified the local machine's hostname
+ will be retrieved via <function>gethostname()</function>.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-K, --host-keytab=<parameter>/path/to/keytab</parameter></option></term>
+ <listitem><para>Specify the path to the host keytab where
+ host credentials will be written after a successful join
+ operation. If not specified the default location will be
+ used, usually <filename>/etc/krb5.keytab</filename>.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--login-type=<parameter>{computer|user}</parameter></option></term>
+ <listitem><para>Specify the type of authentication that
+ will be performed before creating the machine account in
+ the domain. If set to 'computer' then the computer must
+ already have a preset account in the domain. If not
+ specified and none of the other <option>--login-xxx</option>
+ arguments have been specified, then will try both
+ 'computer' and 'user' authentication.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--service-name=<parameter>service</parameter></option></term>
+ <listitem><para>Additional service name for a kerberos
+ principal to be created on the computer account. This
+ option may be specified multiple times.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--show-details</option></term>
+ <listitem><para>After a successful join print out information
+ about join operation. This is output in a format that should
+ be both human and machine readable.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+</refsect1>
+
+<refsect1>
+ <title>Creating a User</title>
+
+ <para><command>adcli create-user</command> creates a new user account
+ in the domain.</para>
+
+<programlisting>
+$ adcli create-user Fry --domain=domain.example.com \
+ --display-name="Philip J. Fry" --mail=fry@domain.example.com
+</programlisting>
+
+ <para>In addition to the global options, you can specify the following
+ options to control how the user is created.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>--display-name=<parameter>"Name"</parameter></option></term>
+ <listitem><para>Set the <code>displayName</code> attribute
+ of the new created user account.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-O, --domain-ou=<parameter>OU=xxx</parameter></option></term>
+ <listitem><para>The full distinguished name of the OU in
+ which to create the user account. If not specified
+ then the computer account will be created in a default
+ location.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--mail=<parameter>email@domain.com</parameter></option></term>
+ <listitem><para>Set the <code>mail</code> attribute of
+ the new created user account. This attribute may be
+ specified multiple times.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--unix-home=<parameter>/home/user</parameter></option></term>
+ <listitem><para>Set the <code>unixHomeDirectory</code> attribute of
+ the new created user account, which should be an absolute
+ path to the user's home directory.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--unix-gid=<parameter>111</parameter></option></term>
+ <listitem><para>Set the <code>gidNumber</code> attribute of
+ the new created user account, which should be the user's
+ numeric primary group id.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--unix-shell=<parameter>/bin/shell</parameter></option></term>
+ <listitem><para>Set the <code>pos</code> attribute of
+ the new created user account, which should be the user's
+ numeric primary user id.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--unix-uid=<parameter>111</parameter></option></term>
+ <listitem><para>Set the <code>loginShell</code> attribute of
+ the new created user account, which should be a path to
+ a valid shell.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+</refsect1>
+
+<refsect1>
+ <title>Deleting a User</title>
+
+ <para><command>adcli delete-user</command> deletes a user account from
+ the domain.</para>
+
+<programlisting>
+$ adcli delete-user Fry --domain=domain.example.com
+</programlisting>
+
+ <para>The various global options can be used.</para>
+
+</refsect1>
+
+
+<refsect1>
+ <title>Creating a Group</title>
+
+ <para><command>adcli create-group</command> creates a new group in the
+ domain.</para>
+
+<programlisting>
+$ adcli create-group Pilots --domain=domain.example.com \
+ --description="Group for all pilots"
+</programlisting>
+
+ <para>In addition to the global options, you can specify the following
+ options to control how the group is created.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>--description=<parameter>"text"</parameter></option></term>
+ <listitem><para>Set the <code>description</code> attribute
+ of the new created group.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>-O, --domain-ou=<parameter>OU=xxx</parameter></option></term>
+ <listitem><para>The full distinguished name of the OU in
+ which to create the group. If not specified
+ then the computer account will be created in a default
+ location.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+</refsect1>
+
+<refsect1>
+ <title>Deleting a Group</title>
+
+ <para><command>adcli delete-group</command> deletes a group from
+ the domain.</para>
+
+<programlisting>
+$ adcli delete-group Pilots --domain=domain.example.com
+</programlisting>
+
+ <para>The various global options can be used.</para>
+
+</refsect1>
+
+<refsect1>
+ <title>Adding a Member to a Group</title>
+
+ <para><command>adcli add-member</command> adds one or more users to a
+ group in the domain. The group is specified first, and then the various
+ users to be added.</para>
+
+<programlisting>
+$ adcli add-member --domain=domain.example.com Pilots Leela Scruffy
+</programlisting>
+
+ <para>The various global options can be used.</para>
+
+ <para></para>
+
+</refsect1>
+
+<refsect1>
+ <title>Removing a Member from a Group</title>
+
+ <para><command>adcli remove-member</command> removes a user from a group
+ in the domain. The group is specified first, and then the various users
+ to be removed.</para>
+
+<programlisting>
+$ adcli remove-member --domain=domain.example.com Pilots Scruffy
+</programlisting>
+
+ <para>The various global options can be used.</para>
+
+</refsect1>
+
+<refsect1>
+ <title>Preset Computer Accounts</title>
+
+ <para><command>adcli preset-computer</command> pre-creates one or more
+ computer accounts in the domain for machines to later use when joining
+ the domain. By doing this machines can join using a one time password
+ or automatically without a password.</para>
+
+<programlisting>
+$ adcli preset-computer --domain=domain.example.com \
+ host1.example.com host2
+Password for Administrator:
+</programlisting>
+
+ <para>If the computer names specified contain dots, then they are
+ treated as fully qualified host names, otherwise they are treated
+ as short computer names. The computer accounts must not already
+ exist.</para>
+
+ <para>In addition to the global options, you can specify the following
+ options to control how this operation is done.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>-O, --domain-ou=<parameter>OU=xxx</parameter></option></term>
+ <listitem><para>The full distinguished name of the OU in
+ which to create the computer accounts. If not specified
+ then the computer account will be created in a default
+ location.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--one-time-password</option></term>
+ <listitem><para>Specify a one time password to use when
+ presetting the computer accounts. If not specified then
+ a default password will be used, which allows for later
+ automatic joins.</para></listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>--service-name=<parameter>service</parameter></option></term>
+ <listitem><para>Additional service name for a kerberos
+ principal to be created on the computer account. This
+ option may be specified multiple times.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+</refsect1>
+
+<refsect1>
+ <title>Reset Computer Account</title>
+
+ <para><command>adcli reset-computer</command> resets a computer account
+ in the domain. If a the appropriate machien is currently joined to the
+ domain, then it's membership will be broken. The account must already
+ exist.</para>
+
+<programlisting>
+$ adcli reset-computer --domain=domain.example.com host2
+</programlisting>
+
+ <para>If the computer names specified contain dots, then they are
+ treated as fully qualified host names, otherwise they are treated
+ as short computer names.</para>
+
+ <para>In addition to the global options, you can specify the following
+ options to control how this operation is done.</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><option>--login-type=<parameter>{computer|user}</parameter></option></term>
+ <listitem><para>Specify the type of authentication that
+ will be performed before creating the machine account in
+ the domain. If set to 'computer' then the computer must
+ already have a preset account in the domain. If not
+ specified and none of the other <option>--login-xxx</option>
+ arguments have been specified, then will try both
+ 'computer' and 'user' authentication.</para></listitem>
+ </varlistentry>
+ </variablelist>
+
+</refsect1>
+
+<refsect1>
+ <title>Delete Computer Account</title>
+
+ <para><command>adcli delete-computer</command> deletes a computer account
+ in the domain. The account must already exist.</para>
+
+<programlisting>
+$ adcli delete-computer --domain=domain.example.com host2
+Password for Administrator:
+</programlisting>
+
+ <para>If the computer name contains a dot, then it is
+ treated as fully qualified host name, otherwise it is treated
+ as short computer name.</para>
+
+ <para>The various global options can be used.</para>
+
+</refsect1>
+
+<refsect1>
+ <title>Bugs</title>
+ <para>
+ Please send bug reports to either the distribution bug tracker
+ or the upstream bug tracker at
+ <ulink url="https://bugs.freedesktop.org/enter_bug.cgi?product=realmd&amp;component=adcli">https://bugs.freedesktop.org/enter_bug.cgi?product=realmd&amp;component=adcli</ulink>
+ </para>
+</refsect1>
+
+<refsect1>
+ <title>See also</title>
+ <simplelist type="inline">
+ <member><citerefentry><refentrytitle>realmd</refentrytitle><manvolnum>8</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>net</refentrytitle><manvolnum>8</manvolnum></citerefentry></member>
+ <member><citerefentry><refentrytitle>sssd</refentrytitle><manvolnum>8</manvolnum></citerefentry></member>
+ </simplelist>
+ <para>
+ Further details available in the p11-kit online documentation at
+ <ulink url="http://www.freedesktop.org/software/realmd/">http://www.freedesktop.org/software/realmd/</ulink>
+ </para>
+</refsect1>
+
+</refentry>
diff --git a/doc/gtk-doc.xsl b/doc/gtk-doc.xsl
new file mode 100644
index 0000000..6ca4b53
--- /dev/null
+++ b/doc/gtk-doc.xsl
@@ -0,0 +1,897 @@
+<?xml version='1.0'?> <!--*- mode: xml -*-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"
+ exclude-result-prefixes="l"
+ version="1.0">
+
+ <!-- import the chunked XSL stylesheet -->
+ <!-- http://www.sagehill.net/docbookxsl/Chunking.html says we should use
+ "chunkfast.xsl", but I can see a difference -->
+ <xsl:import href="http://docbook.sourceforge.net/release/xsl/current/html/chunk.xsl"/>
+ <xsl:include href="version-greater-or-equal.xsl"/>
+
+ <xsl:key name="acronym.key"
+ match="glossentry/glossterm"
+ use="."/>
+ <xsl:key name="gallery.key"
+ match="para[@role='gallery']/link"
+ use="@linkend"/>
+
+ <!-- change some parameters -->
+ <!-- http://docbook.sourceforge.net/release/xsl/current/doc/html/index.html -->
+ <xsl:param name="toc.section.depth">2</xsl:param>
+ <xsl:param name="generate.toc">
+ book toc
+ chapter toc
+ glossary toc
+ index toc
+ part toc
+ reference toc
+ </xsl:param>
+
+ <xsl:param name="chunker.output.encoding" select="'UTF-8'"/>
+ <xsl:param name="chunker.output.indent" select="'yes'"/>
+ <xsl:param name="chunker.output.doctype-public" select="'-//W3C//DTD HTML 4.01 Transitional//EN'"/>
+ <xsl:param name="chunk.fast" select="1"/>
+
+ <xsl:param name="default.encoding" select="'UTF-8'"/>
+ <xsl:param name="chapter.autolabel" select="0"/>
+ <xsl:param name="use.id.as.filename" select="1"/>
+ <xsl:param name="html.ext" select="'.html'"/>
+ <xsl:param name="refentry.generate.name" select="0"/>
+ <xsl:param name="refentry.generate.title" select="1"/>
+ <!-- don't generate all those link tags (very slow and hardly used)
+ it does not show much effect as we have a user.head.content template
+ <xsl:param name="html.extra.head.links" select="0" />
+ -->
+
+ <!-- use index filtering (if available) -->
+ <xsl:param name="index.on.role" select="1"/>
+
+ <!-- display variablelists as tables -->
+ <xsl:param name="variablelist.as.table" select="1"/>
+
+ <!-- new things to consider
+ <xsl:param name="glossterm.auto.link" select="0"></xsl:param>
+ -->
+
+ <!-- this gets set on the command line ... -->
+ <xsl:param name="gtkdoc.version" select="''"/>
+ <xsl:param name="gtkdoc.bookname" select="''"/>
+
+ <!-- ========================================================= -->
+
+ <!-- l10n is slow, we don't ue it, so we'd like to turn it off
+ this atleast avoid the re-evaluation -->
+ <xsl:template name="l10n.language">en</xsl:template>
+
+ <xsl:param name="gtkdoc.l10n.xml" select="document('http://docbook.sourceforge.net/release/xsl/current/common/en.xml')"/>
+
+ <xsl:key name="gtkdoc.gentext.key"
+ match="l:gentext[@key]"
+ use="@key"/>
+ <xsl:key name="gtkdoc.context.key"
+ match="l:context[@name]"
+ use="@name"/>
+
+ <xsl:template name="gentext">
+ <xsl:param name="key" select="local-name(.)"/>
+
+ <xsl:for-each select="$gtkdoc.l10n.xml">
+ <xsl:variable name="l10n.gentext" select="key('gtkdoc.gentext.key', $key)"/>
+
+ <xsl:choose>
+ <xsl:when test="$l10n.gentext">
+ <xsl:value-of select="$l10n.gentext/@text"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>No "en" localization of "</xsl:text>
+ <xsl:value-of select="$key"/>
+ <xsl:text>" exists.</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="gentext.dingbat">
+ <xsl:param name="dingbat">bullet</xsl:param>
+
+ <xsl:variable name="l10n.dingbat"
+ select="($gtkdoc.l10n.xml/l:l10n/l:dingbat[@key=$dingbat])[1]"/>
+
+ <xsl:choose>
+ <xsl:when test="$l10n.dingbat">
+ <xsl:value-of select="$l10n.dingbat/@text"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
+ <xsl:text>No "en" localization of dingbat </xsl:text>
+ <xsl:value-of select="$dingbat"/>
+ <xsl:text> exists; using "en".</xsl:text>
+ </xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="gentext.template">
+ <xsl:param name="context" select="'default'"/>
+ <xsl:param name="name" select="'default'"/>
+ <xsl:param name="origname" select="$name"/>
+
+ <!-- cut leading / if any to avoid one recursion -->
+ <xsl:variable name="rname">
+ <xsl:choose>
+ <xsl:when test="starts-with($name, '/')">
+ <xsl:value-of select="substring-after($name, '/')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <!-- this is called with context="title|title-numbered|title-unnumbered>
+ <xsl:message>
+ <xsl:text>context:</xsl:text><xsl:value-of select="$context"/>
+ <xsl:text>;name:</xsl:text><xsl:value-of select="$rname"/>
+ <xsl:text>;origname:</xsl:text><xsl:value-of select="$origname"/>
+ </xsl:message>
+
+ see html/html.xsl:<xsl:template match="*" mode="html.title.attribute">
+ -->
+
+ <xsl:for-each select="$gtkdoc.l10n.xml">
+ <xsl:variable name="context.node" select="key('gtkdoc.context.key', $context)"/>
+ <xsl:variable name="template.node"
+ select="($context.node/l:template[@name=$rname])[1]"/>
+
+ <xsl:choose>
+ <xsl:when test="$template.node/@text">
+ <xsl:value-of select="$template.node/@text"/>
+ <!-- debug
+ <xsl:message>
+ <xsl:text>=</xsl:text><xsl:value-of select="$template.node/@text"/>
+ </xsl:message>
+ -->
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="contains($rname, '/')">
+ <xsl:call-template name="gentext.template">
+ <xsl:with-param name="context" select="$context"/>
+ <xsl:with-param name="name" select="substring-after($rname, '/')"/>
+ <xsl:with-param name="origname" select="$origname"/>
+ </xsl:call-template>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!-- silently test whether a gentext template exists -->
+ <xsl:template name="gentext.template.exists">
+ <xsl:param name="context" select="'default'"/>
+ <xsl:param name="name" select="'default'"/>
+ <xsl:param name="origname" select="$name"/>
+
+ <xsl:variable name="template">
+ <xsl:call-template name="gentext.template">
+ <xsl:with-param name="context" select="$context"/>
+ <xsl:with-param name="name" select="$name"/>
+ <xsl:with-param name="origname" select="$origname"/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($template) != 0">1</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- shortcut version -->
+ <!-- @bug: https://bugzilla.gnome.org/show_bug.cgi?id=617478 -->
+ <xsl:template name="generate.html.title"/>
+ <!--xsl:template name="generate.html.title">
+ <xsl:variable name="has.title.markup">
+ <xsl:apply-templates select="." mode="title.markup">
+ <xsl:with-param name="verbose" select="0"/>
+ </xsl:apply-templates>
+ </xsl:variable>
+ <xsl:if test="$has.title.markup != '???TITLE???'">
+ <xsl:variable name="gentext.title">
+ <xsl:apply-templates select="." mode="object.title.markup.textonly"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($gentext.title) != 0">
+ <xsl:attribute name="title">
+ <xsl:value-of select="$gentext.title"/>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:when test="alt">
+ <xsl:attribute name="title">
+ <xsl:value-of select="normalize-space(alt)"/>
+ </xsl:attribute>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template-->
+
+ <!-- Generate a title attribute for the context node (e.g. links) -->
+ <xsl:template match="*" mode="html.title.attribute">
+ <xsl:variable name="has.title.markup">
+ <xsl:apply-templates select="." mode="title.markup">
+ <xsl:with-param name="verbose" select="0"/>
+ </xsl:apply-templates>
+ </xsl:variable>
+ <xsl:if test="$has.title.markup != '???TITLE???'">
+ <xsl:variable name="is.title">
+ <xsl:call-template name="gentext.template.exists">
+ <xsl:with-param name="context" select="'title'"/>
+ <xsl:with-param name="name" select="local-name(.)"/>
+ <xsl:with-param name="lang">
+ <xsl:call-template name="l10n.language"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:variable name="is.title-numbered">
+ <xsl:if test="$is.title = 0">
+ <xsl:call-template name="gentext.template.exists">
+ <xsl:with-param name="context" select="'title-numbered'"/>
+ <xsl:with-param name="name" select="local-name(.)"/>
+ <xsl:with-param name="lang">
+ <xsl:call-template name="l10n.language"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+
+
+ <xsl:variable name="is.title-unnumbered">
+ <xsl:if test="$is.title = 0 and $is.title-numbered = 0">
+ <xsl:call-template name="gentext.template.exists">
+ <xsl:with-param name="context" select="'title-unnumbered'"/>
+ <xsl:with-param name="name" select="local-name(.)"/>
+ <xsl:with-param name="lang">
+ <xsl:call-template name="l10n.language"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:variable name="gentext.title">
+ <xsl:if test="$is.title != 0 or
+ $is.title-numbered != 0 or
+ $is.title-unnumbered != 0">
+ <xsl:apply-templates select="."
+ mode="object.title.markup.textonly"/>
+ </xsl:if>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($gentext.title) != 0">
+ <xsl:attribute name="title">
+ <xsl:value-of select="$gentext.title"/>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:when test="alt">
+ <xsl:attribute name="title">
+ <xsl:value-of select="normalize-space(alt)"/>
+ </xsl:attribute>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
+
+
+
+
+ <!-- ========================================================= -->
+ <!-- template to create the index.sgml anchor index -->
+
+ <xsl:template match="book|article">
+ <xsl:variable name="tooldver">
+ <xsl:call-template name="version-greater-or-equal">
+ <xsl:with-param name="ver1" select="$VERSION" />
+ <xsl:with-param name="ver2">1.36</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="$tooldver = 0">
+ <xsl:message terminate="yes">
+FATAL-ERROR: You need the DocBook XSL Stylesheets version 1.36 or higher
+to build the documentation.
+Get a newer version at http://docbook.sourceforge.net/projects/xsl/
+ </xsl:message>
+ </xsl:if>
+ <xsl:apply-imports/>
+
+ <!-- generate the index.sgml href index -->
+ <xsl:call-template name="generate.index"/>
+ </xsl:template>
+
+ <xsl:template name="generate.index">
+ <xsl:call-template name="write.text.chunk">
+ <xsl:with-param name="filename" select="'index.sgml'"/>
+ <xsl:with-param name="content">
+ <xsl:apply-templates select="/book/bookinfo/releaseinfo/ulink"
+ mode="generate.index.mode"/>
+ <!-- check all anchor and refentry elements -->
+ <!--
+ The obvious way to write this is //anchor|//refentry|etc...
+ The obvious way is slow because it causes multiple traversals
+ in libxslt. This take about half the time.
+ -->
+ <xsl:apply-templates select="//*[name()='anchor' or name()='refentry' or name()='refsect1' or
+ name() = 'refsect2' or name()='refsynopsisdiv' or
+ name()='varlistentry']"
+ mode="generate.index.mode"/>
+ </xsl:with-param>
+ <xsl:with-param name="default.encoding" select="'UTF-8'"/>
+ <xsl:with-param name="chunker.output.indent" select="'no'"/>
+ </xsl:call-template>
+ </xsl:template>
+
+ <xsl:template match="*" mode="generate.index.mode">
+ <xsl:if test="not(@href) and count(@id) > 0">
+ <xsl:text>&lt;ANCHOR id=&quot;</xsl:text>
+ <xsl:value-of select="@id"/>
+ <xsl:text>&quot; href=&quot;</xsl:text>
+ <xsl:if test="$gtkdoc.bookname">
+ <xsl:value-of select="$gtkdoc.bookname"/>
+ <xsl:text>/</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="href.target"/>
+ <xsl:text>&quot;&gt;&#10;</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="/book/bookinfo/releaseinfo/ulink" mode="generate.index.mode">
+ <xsl:if test="@role='online-location'">
+ <xsl:text>&lt;ONLINE href=&quot;</xsl:text>
+ <xsl:value-of select="@url"/>
+ <xsl:text>&quot;&gt;&#10;</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <!-- ========================================================= -->
+ <!-- template to output gtkdoclink elements for the unknown targets -->
+
+ <xsl:template match="link">
+ <xsl:choose>
+ <xsl:when test="id(@linkend)">
+ <xsl:apply-imports/>
+ </xsl:when>
+ <xsl:otherwise>
+ <GTKDOCLINK HREF="{@linkend}">
+ <xsl:apply-templates/>
+ </GTKDOCLINK>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- ========================================================= -->
+ <!-- Below are the visual portions of the stylesheet. They provide
+ the normal gtk-doc output style. -->
+
+ <xsl:param name="shade.verbatim" select="0"/>
+ <xsl:param name="refentry.separator" select="0"/>
+
+ <xsl:template match="refsect2">
+ <xsl:if test="preceding-sibling::refsect2">
+ <hr/>
+ </xsl:if>
+ <xsl:apply-imports/>
+ </xsl:template>
+
+ <xsl:template name="user.head.content">
+ <xsl:if test="$gtkdoc.version">
+ <meta name="generator" content="GTK-Doc V{$gtkdoc.version} (XML mode)"/>
+ </xsl:if>
+ <link rel="stylesheet" href="style.css" type="text/css"/>
+ </xsl:template>
+
+ <xsl:template name="user.footer.content">
+ <div class="footer">
+ <hr />
+ <xsl:choose>
+ <xsl:when test="$gtkdoc.version">
+ Generated by GTK-Doc V<xsl:copy-of select="$gtkdoc.version" />
+ </xsl:when>
+ <xsl:otherwise>
+ Generated by GTK-Doc
+ </xsl:otherwise>
+ </xsl:choose>
+ </div>
+ </xsl:template>
+
+ <xsl:template match="title" mode="book.titlepage.recto.mode">
+ <table class="navigation" id="top" width="100%"
+ cellpadding="2" cellspacing="0">
+ <tr>
+ <th valign="middle">
+ <p class="{name(.)}">
+ <xsl:value-of select="."/>
+ </p>
+ </th>
+ </tr>
+ </table>
+ </xsl:template>
+
+ <xsl:template name="header.navigation">
+ <xsl:param name="prev" select="/foo"/>
+ <xsl:param name="next" select="/foo"/>
+ <xsl:variable name="home" select="/*[1]"/>
+ <xsl:variable name="up" select="parent::*"/>
+ <xsl:variable name="refsections" select="./refsect1[@role]"/>
+ <xsl:variable name="glssections" select="./glossdiv/title"/>
+ <xsl:variable name="idxsections" select="./indexdiv/indexdiv/title"/>
+ <xsl:variable name="section_id" select="./@id"/>
+ <xsl:variable name="sect_object_hierarchy" select="./refsect1[@role='object_hierarchy']"/>
+ <xsl:variable name="sect_impl_interfaces" select="./refsect1[@role='impl_interfaces']"/>
+ <xsl:variable name="sect_prerequisites" select="./refsect1[@role='prerequisites']"/>
+ <xsl:variable name="sect_derived_interfaces" select="./refsect1[@role='derived_interfaces']"/>
+ <xsl:variable name="sect_implementations" select="./refsect1[@role='implementations']"/>
+ <xsl:variable name="sect_properties" select="./refsect1[@role='properties']"/>
+ <xsl:variable name="sect_child_properties" select="./refsect1[@role='child_properties']"/>
+ <xsl:variable name="sect_style_properties" select="./refsect1[@role='style_properties']"/>
+ <xsl:variable name="sect_signal_proto" select="./refsect1[@role='signal_proto']"/>
+ <xsl:variable name="sect_desc" select="./refsect1[@role='desc']"/>
+ <xsl:variable name="sect_synopsis" select="./refsynopsisdiv[@role='synopsis']"/>
+ <!--
+ <xsl:variable name="sect_details" select="./refsect1[@id='details']"/>
+ <xsl:variable name="sect_property_details" select="./refsect1[@id='property_details']"/>
+ <xsl:variable name="sect_child_property_details" select="./refsect1[@id='child_property_details']"/>
+ <xsl:variable name="sect_style_property_details" select="./refsect1[@id='style_property_details']"/>
+ <xsl:variable name="sect_signals" select="./refsect1[@id='signals']"/>
+ -->
+
+ <xsl:if test="$suppress.navigation = '0' and $home != .">
+ <table class="navigation" id="top" width="100%"
+ summary = "Navigation header" cellpadding="2" cellspacing="2">
+ <tr valign="middle">
+ <xsl:choose>
+ <xsl:when test="count($prev) > 0">
+ <td>
+ <a accesskey="p">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$prev"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <img src="left.png" width="24" height="24" border="0">
+ <xsl:attribute name="alt">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key">nav-prev</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ </img>
+ </a>
+ </td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>&#160;</td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="count($up) > 0 and $up != $home">
+ <td>
+ <a accesskey="u">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$up"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <img src="up.png" width="24" height="24" border="0">
+ <xsl:attribute name="alt">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key">nav-up</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ </img>
+ </a>
+ </td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>&#160;</td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:choose>
+ <xsl:when test="$home != .">
+ <td>
+ <a accesskey="h">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$home"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <img src="home.png" width="24" height="24" border="0">
+ <xsl:attribute name="alt">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key">nav-home</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ </img>
+ </a>
+ </td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>&#160;</td>
+ </xsl:otherwise>
+ </xsl:choose>
+ <th width="100%" align="center">
+ <xsl:apply-templates select="$home" mode="object.title.markup"/>
+ </th>
+ <xsl:choose>
+ <xsl:when test="count($next) > 0">
+ <td>
+ <a accesskey="n">
+ <xsl:attribute name="href">
+ <xsl:call-template name="href.target">
+ <xsl:with-param name="object" select="$next"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <img src="right.png" width="24" height="24" border="0">
+ <xsl:attribute name="alt">
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key">nav-next</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ </img>
+ </a>
+ </td>
+ </xsl:when>
+ <xsl:otherwise>
+ <td>&#160;</td>
+ </xsl:otherwise>
+ </xsl:choose>
+ </tr>
+ <!--<xsl:if test="name()='refentry'"-->
+ <xsl:choose>
+ <xsl:when test="count($refsections) > 0">
+ <tr>
+ <td colspan="5" class="shortcuts">
+ <xsl:if test="count($sect_synopsis) > 0">
+ <a href="#{$section_id}.synopsis" class="shortcut">Top</a>
+ </xsl:if>
+ <xsl:if test="count($sect_desc) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.description" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='desc']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_object_hierarchy) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.object-hierarchy" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='object_hierarchy']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_impl_interfaces) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.implemented-interfaces" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='impl_interfaces']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_prerequisites) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.prerequisites" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='prerequisites']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_derived_interfaces) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.derived-interfaces" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='derived_interfaces']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_implementations) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.implementations" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='implementations']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_properties) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.properties" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='properties']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_child_properties) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.child-properties" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='child_properties']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_style_properties) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.style-properties" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='style_properties']/title"/>
+ </a>
+ </xsl:if>
+ <xsl:if test="count($sect_signal_proto) > 0">
+ &#160;|&#160;
+ <a href="#{$section_id}.signals" class="shortcut">
+ <xsl:value-of select="./refsect1[@role='signal_proto']/title"/>
+ </a>
+ </xsl:if>
+ <!--
+ <xsl:if test="count($sect_details) > 0">
+ <a href="#details" class="shortcut">
+ <xsl:value-of select="./refsect1[@id='details']/title"/>
+ </a>
+ &#160;|&#160;
+ </xsl:if>
+ <xsl:if test="count($sect_property_details) > 0">
+ <a href="#property_details" class="shortcut">
+ <xsl:value-of select="./refsect1[@id='property_details']/title"/>
+ </a>
+ &#160;|&#160;
+ </xsl:if>
+ <xsl:if test="count($sect_child_property_details) > 0">
+ <a href="#child_property_details" class="shortcut">
+ <xsl:value-of select="./refsect1[@id='property_child_details']/title"/>
+ </a>
+ &#160;|&#160;
+ </xsl:if>
+ <xsl:if test="count($sect_style_property_details) > 0">
+ <a href="#style_property_details" class="shortcut">
+ <xsl:value-of select="./refsect1[@id='style_property_details']/title"/>
+ </a>
+ &#160;|&#160;
+ </xsl:if>
+ <xsl:if test="count($sect_signals) > 0">
+ <a href="#signals" class="shortcut">
+ <xsl:value-of select="./refsect1[@id='signals']/title"/>
+ </a>
+ &#160;|&#160;
+ </xsl:if>
+ -->
+ </td>
+ </tr>
+ </xsl:when>
+ <!-- this is not yet very nice, as it requires all glossdic/indexdiv
+ elements having a anchor element. maybe we can customize the xsl
+ to automaticaly create local anchors
+ -->
+ <xsl:when test="count($glssections) > 0">
+ <tr>
+ <td colspan="5" class="shortcuts">
+ <xsl:for-each select="./glossdiv">
+ <xsl:if test="position() > 1">
+ &#160;|&#160;
+ </xsl:if>
+ <a class="shortcut">
+ <xsl:attribute name="href">#gls<xsl:value-of select="./title"/></xsl:attribute>
+ <xsl:value-of select="./title"/>
+ </a>
+ </xsl:for-each>
+ </td>
+ </tr>
+ </xsl:when>
+ <xsl:when test="count($idxsections) > 0">
+ <tr>
+ <td colspan="5" class="shortcuts">
+ <xsl:for-each select="./indexdiv/indexdiv">
+ <xsl:if test="position() > 1">
+ &#160;|&#160;
+ </xsl:if>
+ <a class="shortcut">
+ <xsl:attribute name="href">#idx<xsl:value-of select="./title"/></xsl:attribute>
+ <xsl:value-of select="./title"/>
+ </a>
+ </xsl:for-each>
+ </td>
+ </tr>
+ </xsl:when>
+ </xsl:choose>
+ </table>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="footer.navigation">
+ </xsl:template>
+
+ <!-- avoid creating multiple identical indices
+ if the stylesheets don't support filtered indices
+ -->
+ <xsl:template match="index">
+ <xsl:variable name="has-filtered-index">
+ <xsl:call-template name="version-greater-or-equal">
+ <xsl:with-param name="ver1" select="$VERSION" />
+ <xsl:with-param name="ver2">1.66</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="($has-filtered-index = 1) or (count(@role) = 0)">
+ <xsl:apply-imports/>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="index" mode="toc">
+ <xsl:variable name="has-filtered-index">
+ <xsl:call-template name="version-greater-or-equal">
+ <xsl:with-param name="ver1" select="$VERSION" />
+ <xsl:with-param name="ver2">1.66</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="($has-filtered-index = 1) or (count(@role) = 0)">
+ <xsl:apply-imports/>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="para">
+ <xsl:choose>
+ <xsl:when test="@role = 'gallery'">
+ <div class="container">
+ <div class="gallery-spacer"> </div>
+ <xsl:apply-templates mode="gallery.mode"/>
+ <div class="gallery-spacer"> </div>
+ </div>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-imports/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!-- FIXME: try if that works too -->
+ <!--xsl:template match="para[@role='gallery']">
+ <div class="container">
+ <div class="gallery-spacer"> </div>
+ <xsl:apply-templates mode="gallery.mode"/>
+ <div class="gallery-spacer"> </div>
+ </div>
+ </xsl:template-->
+
+
+
+ <xsl:template match="link" mode="gallery.mode">
+ <div class="gallery-float">
+ <xsl:apply-templates select="."/>
+ </div>
+ </xsl:template>
+
+ <!-- add gallery handling to refnamediv template -->
+ <xsl:template match="refnamediv">
+ <div class="{name(.)}">
+ <table width="100%">
+ <tr><td valign="top">
+ <xsl:call-template name="anchor"/>
+ <xsl:choose>
+ <xsl:when test="$refentry.generate.name != 0">
+ <h2>
+ <xsl:call-template name="gentext">
+ <xsl:with-param name="key" select="'RefName'"/>
+ </xsl:call-template>
+ </h2>
+ </xsl:when>
+ <xsl:when test="$refentry.generate.title != 0">
+ <h2>
+ <xsl:choose>
+ <xsl:when test="../refmeta/refentrytitle">
+ <xsl:apply-templates select="../refmeta/refentrytitle"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select="refname[1]"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </h2>
+ </xsl:when>
+ </xsl:choose>
+ <p>
+ <xsl:apply-templates/>
+ </p>
+ </td>
+ <td valign="top" align="right">
+ <xsl:choose>
+ <xsl:when test="../refmeta/refmiscinfo/inlinegraphic">
+ <xsl:apply-templates select="../refmeta/refmiscinfo/inlinegraphic"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- find the gallery image to use here
+ - determine the id of the enclosing refentry
+ - look for an inlinegraphic inside a link with linkend == refentryid inside a para with role == gallery
+ - use it here
+ -->
+ <xsl:variable name="refentryid" select="../@id"/>
+ <xsl:apply-templates select="key('gallery.key', $refentryid)/inlinegraphic"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </td></tr>
+ </table>
+ </div>
+ </xsl:template>
+
+ <!-- add anchors for index sections -->
+ <xsl:template match="indexdiv">
+ <a><xsl:attribute name="name">idx<xsl:value-of select="./title"/></xsl:attribute></a>
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- add anchors for glossary sections -->
+ <xsl:template match="glossdiv">
+ <a><xsl:attribute name="name">gls<xsl:value-of select="./title"/></xsl:attribute></a>
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- Exterminate any trace of indexterms in the main flow -->
+ <xsl:template match="indexterm">
+ </xsl:template>
+
+ <!-- Extra link on the right side of doc-blobs -->
+ <xsl:template name="user.format.extralinks">
+ <xsl:if test="../ulink[@role='extralinks']">
+ <span class="extralinks">
+ <xsl:for-each select="../ulink[@role='extralinks']">
+ <xsl:if test="position() = 1">[&#160;</xsl:if>
+ <xsl:if test="position() > 1">&#160;|&#160;</xsl:if>
+ <a>
+ <xsl:attribute name="href"><xsl:value-of select="@url"/></xsl:attribute>
+ <xsl:copy-of select="text()" />
+ </a>
+ <xsl:if test="position() = last()">&#160;]</xsl:if>
+ </xsl:for-each>
+ </span>
+ </xsl:if>
+ <!--xsl:copy-of select="text()" /-->
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <!-- this is not in use yet (see gtkdoc-mkdb
+ <xsl:template match="//refsect2/ulink[@role='extralinks']"/>
+ <xsl:template match="//refsect1/ulink[@role='extralinks']"/>
+
+ <xsl:template match="//refsect2/title">
+ <h3><xsl:call-template name="user.format.extralinks"/></h3>
+ </xsl:template>
+
+ <xsl:template match="//refsect1/title">
+ <h2><xsl:call-template name="user.format.extralinks"/></h2>
+ </xsl:template>
+ -->
+
+ <!-- ==================================================================== -->
+
+ <xsl:template match="acronym">
+ <xsl:call-template name="generate.acronym.link"/>
+ </xsl:template>
+
+ <xsl:template name="generate.acronym.link">
+ <xsl:param name="acronym">
+ <xsl:apply-templates/>
+ </xsl:param>
+ <!--
+ We use for-each to change context to the database document because key()
+ only locates elements in the same document as the context node!
+ -->
+
+ <xsl:param name="value" >
+ <xsl:value-of select="key('acronym.key', $acronym)/../glossdef/para[1]" />
+ </xsl:param>
+ <xsl:choose>
+ <xsl:when test="$value=''">
+ <!-- debug -->
+ <xsl:message>
+ In gtk-doc.xsl: For acronym (<xsl:value-of select="$acronym"/>) no value found!
+ </xsl:message>
+ <a>
+ <xsl:attribute name="href">
+ <xsl:text>http://foldoc.org/</xsl:text>
+ <xsl:value-of select="$acronym"/>
+ </xsl:attribute>
+ <xsl:call-template name="inline.charseq"/>
+ </a>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- found -->
+ <acronym>
+ <xsl:attribute name="title">
+ <xsl:value-of select="$value"/>
+ </xsl:attribute>
+ <xsl:call-template name="inline.charseq"/>
+ </acronym>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/doc/static/gtk-doc.css b/doc/static/gtk-doc.css
new file mode 100644
index 0000000..5618926
--- /dev/null
+++ b/doc/static/gtk-doc.css
@@ -0,0 +1,264 @@
+.synopsis, .classsynopsis
+{
+ /* tango:aluminium 1/2 */
+ background: #eeeeec;
+ border: solid 1px #d3d7cf;
+ padding: 0.5em;
+}
+.programlisting
+{
+ /* tango:sky blue 0/1 */
+ background: #e6f3ff;
+ border: solid 1px #729fcf;
+ padding: 0.5em;
+}
+.variablelist
+{
+ padding: 4px;
+ margin-left: 3em;
+}
+.variablelist td:first-child
+{
+ vertical-align: top;
+}
+
+@media screen {
+ sup a.footnote
+ {
+ position: relative;
+ top: 0em ! important;
+ }
+ /* this is needed so that the local anchors are displayed below the naviagtion */
+ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name]
+ {
+ display: inline-block;
+ position: relative;
+ top:-5em;
+ }
+ /* this seems to be a bug in the xsl style sheets when generating indexes */
+ div.index div.index
+ {
+ top: 0em;
+ }
+ /* make space for the fixed navigation bar and add space at the bottom so that
+ * link targets appear somewhat close to top
+ */
+ body
+ {
+ padding-top: 3.2em;
+ padding-bottom: 20em;
+ }
+ /* style and size the navigation bar */
+ table.navigation#top
+ {
+ position: fixed;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ z-index: 10;
+ }
+ .navigation a, .navigation a:visited
+ {
+ /* tango:scarlet red 3 */
+ color: #a40000;
+ }
+ .navigation a:hover
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ }
+ td.shortcuts
+ {
+ /* tango:scarlet red 1 */
+ color: #ef2929;
+ font-size: 80%;
+ white-space: nowrap;
+ }
+}
+@media print {
+ table.navigation {
+ visibility: collapse;
+ display: none;
+ }
+ div.titlepage table.navigation {
+ visibility: visible;
+ display: table;
+ /* tango:scarlet red 0/1 */
+ background: #ffe6e6;
+ border: solid 1px #ef2929;
+ margin-top: 0;
+ margin-bottom: 0;
+ top: 0;
+ left: 0;
+ height: 3em;
+ }
+}
+
+.navigation .title
+{
+ font-size: 200%;
+}
+
+div.gallery-float
+{
+ float: left;
+ padding: 10px;
+}
+div.gallery-float img
+{
+ border-style: none;
+}
+div.gallery-spacer
+{
+ clear: both;
+}
+
+a, a:visited
+{
+ text-decoration: none;
+ /* tango:sky blue 2 */
+ color: #3465a4;
+}
+a:hover
+{
+ text-decoration: underline;
+ /* tango:sky blue 1 */
+ color: #729fcf;
+}
+
+div.table table
+{
+ border-collapse: collapse;
+ border-spacing: 0px;
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+}
+
+div.table table td, div.table table th
+{
+ /* tango:aluminium 3 */
+ border: solid 1px #babdb6;
+ padding: 3px;
+ vertical-align: top;
+}
+
+div.table table th
+{
+ /* tango:aluminium 2 */
+ background-color: #d3d7cf;
+}
+
+hr
+{
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ background: #babdb6;
+ border: none 0px;
+ height: 1px;
+ clear: both;
+}
+
+.footer
+{
+ padding-top: 3.5em;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ text-align: center;
+ font-size: 80%;
+}
+
+.warning
+{
+ /* tango:orange 0/1 */
+ background: #ffeed9;
+ border-color: #ffb04f;
+}
+.note
+{
+ /* tango:chameleon 0/0.5 */
+ background: #d8ffb2;
+ border-color: #abf562;
+}
+.note, .warning
+{
+ padding: 0.5em;
+ border-width: 1px;
+ border-style: solid;
+}
+.note h3, .warning h3
+{
+ margin-top: 0.0em
+}
+.note p, .warning p
+{
+ margin-bottom: 0.0em
+}
+
+/* blob links */
+h2 .extralinks, h3 .extralinks
+{
+ float: right;
+ /* tango:aluminium 3 */
+ color: #babdb6;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+.annotation
+{
+ /* tango:aluminium 5 */
+ color: #555753;
+ font-size: 80%;
+ font-weight: normal;
+}
+
+/* code listings */
+
+.listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */
+.listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */
+.listing_code .programlisting .function { color: #000000; font-weight: bold; }
+.listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */
+.listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */
+.listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */
+.listing_code .programlisting .normal { color: #000000; }
+.listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */
+.listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */
+.listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */
+.listing_code .programlisting .type { color: #000000; }
+.listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */
+.listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */
+
+.listing_frame {
+ /* tango:sky blue 1 */
+ border: solid 1px #729fcf;
+ padding: 0px;
+}
+
+.listing_lines, .listing_code {
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 0.5em;
+}
+.listing_lines {
+ /* tango:sky blue 0.5 */
+ background: #a6c5e3;
+ /* tango:aluminium 6 */
+ color: #2e3436;
+}
+.listing_code {
+ /* tango:sky blue 0 */
+ background: #e6f3ff;
+}
+.listing_code .programlisting {
+ /* override from previous */
+ border: none 0px;
+ padding: 0px;
+}
+.listing_lines pre, .listing_code pre {
+ margin: 0px;
+}
diff --git a/doc/static/home.png b/doc/static/home.png
new file mode 100644
index 0000000..1700361
--- /dev/null
+++ b/doc/static/home.png
Binary files differ
diff --git a/doc/static/left.png b/doc/static/left.png
new file mode 100644
index 0000000..2d05b3d
--- /dev/null
+++ b/doc/static/left.png
Binary files differ
diff --git a/doc/static/right.png b/doc/static/right.png
new file mode 100644
index 0000000..92832e3
--- /dev/null
+++ b/doc/static/right.png
Binary files differ
diff --git a/doc/static/style.css b/doc/static/style.css
new file mode 100644
index 0000000..700d011
--- /dev/null
+++ b/doc/static/style.css
@@ -0,0 +1,114 @@
+@import url("gtk-doc.css");
+
+TABLE.navigation {
+ background-color: #238b49 !important;
+ border-width: 0 !important;
+ color: white;
+ font-family: Georgia, "Times New Roman", Times, serif;
+ height: 4em !important;
+}
+
+TABLE.navigation TH {
+ font-size: 30pt !important;
+ font-weight: normal;
+ text-align: left !important;
+ padding-left: 10pt;
+}
+
+TABLE.navigation TH:first-child {
+ padding-left: 40pt;
+}
+
+.shortcuts {
+ color: white !important;
+}
+
+.shortcuts a {
+ color: white !important;
+ font-family: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif;
+}
+
+P.title {
+ font-size: 30pt !important;
+}
+
+BODY {
+ padding-top: 5.5em !important;
+ margin: 0px;
+}
+
+
+/* Target all Firefox, since firefox has bug wrt TABLE + position: fixed */
+@-moz-document url-prefix() {
+ TABLE.navigation { position: static !important; }
+ BODY { padding-top: 0 !important; }
+}
+
+DIV.book,
+DIV.refentry,
+DIV.chapter,
+DIV.index,
+DIV.footer,
+DIV.section,
+DIV.part {
+ font-family: Verdana, Arial, 'Bitstream Vera Sans', Helvetica, sans-serif;
+ font-size: 9.5pt;
+ line-height: 150%;
+}
+
+BODY > DIV.book,
+BODY > DIV.footer,
+BODY > DIV.part {
+ margin-left: 1em;
+ margin-right: 1em;
+}
+
+BODY > DIV.refentry,
+BODY > DIV.chapter,
+BODY > DIV.index,
+BODY > DIV.section {
+ margin-left: 3em;
+ margin-right: 1em;
+}
+
+DIV.variablelist TABLE {
+ font-size: 9.5pt;
+ line-height: 150%;
+}
+
+DIV.refsect1,
+DIV.refsect2,
+DIV.refsynopsisdiv {
+ margin-bottom: 3em !important;
+}
+
+H2 {
+ position: relative;
+ left: -1em;
+ font-weight: normal !important;
+}
+
+H3 {
+ position: relative;
+ left: -1em;
+ font-weight: normal !important;
+}
+
+DD > DL {
+ margin-top: 0.3em;
+ margin-bottom: 0.3em;
+}
+
+PRE.screen {
+ border: solid 1px #729fcf;
+ padding: 0.5em;
+ background: #e6f3ff;
+}
+
+CODE.option {
+ white-space: nowrap;
+}
+
+SPAN.term {
+ padding-right: 1em;
+} \ No newline at end of file
diff --git a/doc/static/up.png b/doc/static/up.png
new file mode 100644
index 0000000..85b3e2a
--- /dev/null
+++ b/doc/static/up.png
Binary files differ
diff --git a/doc/version-greater-or-equal.xsl b/doc/version-greater-or-equal.xsl
new file mode 100644
index 0000000..8edcd81
--- /dev/null
+++ b/doc/version-greater-or-equal.xsl
@@ -0,0 +1,54 @@
+<?xml version='1.0'?> <!--*- mode: xml -*-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ version="1.0"
+ xmlns="http://www.w3.org/TR/xhtml1/transitional"
+ exclude-result-prefixes="#default">
+ <xsl:template name="version-greater-or-equal">
+ <xsl:param name="ver1"></xsl:param>
+ <xsl:param name="ver2"></xsl:param>
+ <xsl:variable name="vp1">
+ <xsl:choose>
+ <xsl:when test="contains($ver1, '.')">
+ <xsl:value-of select="substring-before($ver1, '.')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$ver1"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="vp2">
+ <xsl:choose>
+ <xsl:when test="contains($ver2, '.')">
+ <xsl:value-of select="substring-before($ver2, '.')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$ver2"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$vp1 &gt; $vp2">
+ 1
+ </xsl:when>
+ <xsl:when test="$vp1 &lt; $vp2">
+ 0
+ </xsl:when>
+ <xsl:when test="$vp1 = $vp2">
+ <xsl:choose>
+ <xsl:when test="contains($ver1, '.') and contains($ver2, '.')">
+ <xsl:call-template name="version-greater-or-equal">
+ <xsl:with-param name="ver1" select="substring-after($ver1, '.')"/>
+ <xsl:with-param name="ver2" select="substring-after($ver2, '.')"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="contains($ver2, '.')">
+ 0
+ </xsl:when>
+ <xsl:otherwise>
+ 1
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+</xsl:stylesheet>