<?xml version="1.0"?>
<!DOCTYPE article [
<!ENTITY version "1.0.53">
<!ENTITY mdash  "--">
<!ENTITY hellip "...">
<!ENTITY copy       "&#x00A9;"> <!-- COPYRIGHT SIGN -->
        <!-- replace version above with actual application version number-->
	<!--  Template Version: 1.0.1  (do not remove this line) -->



<!ENTITY APPLET-TEMPLATE-1x-SHELL SYSTEM
"templates/applet_template_1-applet.sgml.cdata">
<!ENTITY APPLET-TEMPLATE-1x SYSTEM
"templates/applet_template_1.sgml.cdata">
]>

<!--  Version: 1.0.1  -->

<article id="index">
  <articleinfo>

    <authorgroup>

      <author>
        <firstname>David</firstname>
        <surname>Mason</surname>
        <affiliation>
          <orgname>Red Hat, Inc.</orgname>
          <address>
            <email>dcm@redhat.com</email>
          </address>
        </affiliation>
      </author>

      <author>
        <firstname>Daniel</firstname>
        <surname>Mueth</surname>
        <affiliation>
          <address>
            <email>d-mueth@uchicago.edu</email>
          </address>
        </affiliation>
      </author>

      <author>
        <firstname>Alexander</firstname>
        <surname>Kirillov</surname>
        <affiliation>
          <address>
            <email>kirillov@math.sunysb.edu</email>
          </address>
        </affiliation>
      </author>

    </authorgroup>

    <releaseinfo>
      This is a pre-release!
    </releaseinfo>
    
    <revhistory>
      <revision>
        <revnumber>
          0.99
        </revnumber>
        <date>
         04.10.2000
        </date>
      </revision>
    </revhistory>
    
    <copyright>
      <year>2000</year>
      <holder>Red Hat, Inc., Daniel Mueth, and Alexander Kirillov</holder>
    </copyright>

    <legalnotice>
     <para>
      Permission is granted to copy, distribute and/or modify this
      document under the terms of the <citetitle>GNU Free Documentation
      License</citetitle>, Version 1.1 or any later version published
      by the Free Software Foundation with no Invariant Sections, no
      Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy
      of the <citetitle>GNU Free Documentation License</citetitle> from
      the Free Software Foundation by visiting <ulink type="http"
      url="http://www.fsf.org">their Web site</ulink> or by writing to:
      Free Software Foundation, Inc., 59 Temple Place - Suite 330,
      Boston, MA 02111-1307, USA.
     </para>
     <para>
      Many of the names used by companies to distinguish their products and
      services are claimed as trademarks. Where those names appear in any
      GNOME documentation, and those trademarks are made aware to the members
      of the GNOME Documentation Project, the names have been printed in caps
      or initial caps.
     </para>
    </legalnotice>

    <title>The GNOME Handbook of Writing Software Documentation</title>

  </articleinfo>
  
  <!-- ################# Introduction ############### -->

  <sect1 id="intro">
    <title>Introduction</title>

    <!-- ####### Introduction | The GNOME Documentation Project ####### -->

    <sect2 id="gdp">
      <title>The GNOME Documentation Project</title>

      <sect3 id="goals">
        <title>Goals</title>
        <para>
          The GNOME Documentation Project (GDP) aims to provide GNOME
          and GNOME applications with a complete, intuitive, and clear
          documentation system.  At the center of the GDP is the
          <application>GNOME Help Browser</application>, which
          presents a unified interface to GNOME-specific documentation
          as well as other Linux documentation such as man pages and
          texinfo documents. The GNOME Help System provides a
          comprehensive view of documentation on a machine by
          dynamically assembling the documentation of GNOME
          applications and components which are installed. The GDP is
          responsible for writing numerous GNOME-related documents,
          both for developers and for users.  Developer documentation
          includes <ulink url="http://developer.gnome.org/doc/API/"
          type="http">APIs for the GNOME libraries</ulink>, <ulink
          url="http://developer.gnome.org/doc/whitepapers/"
          type="http"><citetitle>GNOME White
          Papers</citetitle></ulink>, GNOME developer <ulink
          url="http://developer.gnome.org/doc/tutorials/"
          type="http">tutorials</ulink>, the <ulink
          url="http://developer.gnome.org/doc/FAQ/"
          type="http"><citetitle>GNOME Developer
          FAQ</citetitle></ulink>, the <ulink
          url="http://developer.gnome.org" type="http">GNOME
          Developer's Website</ulink>, and <citetitle>GNOME
          Handbook</citetitle>'s, such as the one you are reading.
          User documentation include the <ulink
          url="http://www.gnome.org/learn/"
          type="http"><citetitle>GNOME User's
          Guide</citetitle></ulink>, the <ulink
          url="http://www.gnome.org/learn/"
          type="http"><citetitle>GNOME FAQ</citetitle></ulink>, and
          GNOME application documentation.  Most GNOME applications
          have their own manual in addition to context sensitive help.
        </para>
      </sect3>

      <sect3 id="joining">
       <title>Joining the GDP</title>
       <para>
         Documenting GNOME and all the numerous GNOME applications is
         a very large project.  The GDP is always looking for people
         to help write, update, and edit documentation.  If you are
         interested in joining the GDP team, you should join the
         <ulink url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
         <citetitle>gnome-doc-list mailing list</citetitle> </ulink>.
         Read <xref linkend="gettingstarted" />, for help selecting a
         project to work on.  Feel free to introduce yourself on the
         gnome-doc-list mailing list and indicate which project you
         intend to work on, or else ask for suggestions of important
         documents which need work done. You may also want to join the
         #docs IRC channel on irc.gnome.org to meet other GDP members
         and discuss any questions you may have.  For a list of GDP
         projects and members, see the
         <ulink url="http://developer.gnome.org/projects/gdp">
           <citetitle>GDP Website</citetitle></ulink>.
       </para>
      </sect3>

      <sect3 id="collaborating">
       <title>Collaborating with the GDP</title>
       <para>
        GNOME developers, packagers, and translators may not be
        writing GNOME documentation but will want to understand how
        the GNOME documentation system works and will need to
        collaborate with GDP members.  This document should help to
        outline the structure of how the GNOME documentation system
        works.  Developers who do not write the documentation for
        their applications are encouraged to find a GDP member to
        write the documentation.  This is best done by sending an
        email to the <ulink
        url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
        <citetitle>gnome-doc-list mailing list</citetitle> </ulink>
        describing the application, where it can be downloaded from,
        and that the developer(s) would like a GDP member to write
        documentation for the application. The #docs IRC channel on
        irc.gnome.org is another option for contacting GDP members.
       </para>
      </sect3>
    </sect2>

    <!-- ####### Introduction | Notation and Conventions  ####### -->

    <sect2 id="notation">
      <title>Notation and Conventions</title>
      <para>
        This Handbook uses the following notation:
        <informaltable frame="none">
          <tgroup cols="2">
            <tbody>
              <row>
                <entry>
                  <filename class="directory">/usr/bin</filename>
                </entry>
                <entry>
                  Directory
                </entry>
              </row>
              <row>
                <entry>
                  <filename>foo.sgml</filename>
                </entry>
                <entry>
                  Filename
                </entry>
              </row>
              <row>
                <entry>
                  <command>command</command>
                </entry>
                <entry>
                  Command or text that would be typed.
                </entry>
              </row>
              <row>
                <entry>
                  <command><replaceable>replaceable</replaceable></command>
                </entry>
                <entry>
                  "Variable" text that can be replaced.
                </entry>
              </row>
              <row>
                <entry>
                  <literal>Program or Doc Code</literal>
                </entry>
                <entry>Program or document code</entry>
              </row>
            </tbody>
          </tgroup>
        </informaltable>
      </para>
    </sect2>

    <!-- ####### Introduction | About This Handbook  ####### -->

    <sect2 id="about">
      <title>About This Handbook</title>
      <para>
       This Handbook is a guide for both writing documentation for
       GNOME components and applications and for properly binding and
       packaging documentation into GNOME applications.
      </para>
      <para>
       This Handbook, like all GNOME documentation, was written in
       DocBook(SGML) and is available in several formats including
       SGML, HTML, PostScript, and PDF.  For the latest version, see
       <ulink
       url="http://developer.gnome.org/projects/gdp/handbook.html"> 
       <citetitle>Getting The GNOME Handbook of Writing Software
       Documentation</citetitle> </ulink>.  Alternately, one may
       download it anonymously from GNOME CVS under <filename
       class="directory">gnome-docu/gdp</filename>.
      </para>
    </sect2>
  </sect1>

<!-- ################# Getting Started  ############### -->

  <sect1 id="gettingstarted">
    <title>Getting Started Writing GNOME Documentation</title>

<!--####### Getting Started | Selecting A Document ####### -->

    <sect2 id="selecting">
      <title>Selecting A Document</title>
    
      <sect3 id="know">
        <title>Document Something You Know</title>
        <para>
          The most frequently asked question of new contributors who
          join the GDP is "which document should I start
          with?". Because most people involved are volunteers, we do
          not <emphasis>assign</emphasis> projects and applications to
          write documents for. The first step is all yours - you must
          decide what about GNOME interests you most and find out if
          it has complete documents or not.
        </para>
        <para>
          It is also important to spend some time with GNOME to make
          sure you are familiar enough with it to be
          <emphasis>authoritative</emphasis>  in your writing. The
          best way to do this is to just sit down and play with GNOME
          as much as possible before starting to write.
        </para>
        <para>
          The easiest way to get started is to improve existing
          documentation. If you notice some inaccuracies or omissions
          in the documentation, or you think that you can explain the
          material more clearly, just send your suggestions to the
          author of the original documentation or to the GNOME
          documentation project at <email>docs@gnome.org</email>.
        </para>
      </sect3>
      
      <sect3 id="doctable">
        <title>The GNOME Documentation Status Table</title>
        <para>
          The <citetitle>GDP Documentation Status Table</citetitle>
          (<citetitle>DocTable</citetitle>) (<ulink
          url="http://www.gnome.org/gdp/doctable/"
          type="http">http://www.gnome.org/gdp/doctable/</ulink>) is a
          web page which tracks the status of all the various
          documentation components of GNOME.  These components include
          application documentation, internal GNOME component
          documentation, user documentation, and developer
          documentation.  For each documentation item, it tracks the
          current status of the documentation, who is working on the
          particular document, where the documentation can be found,
          and provides a forum for the discussion of each item.
        </para>
        <para>
          You should use the <citetitle>DocTable</citetitle> to help
          you select a documentation item which needs work done.  Once
          you have selected an item to work on, please register
          yourself as an author so that other authors do not duplicate
          your work and may contact you to help or offer suggestions.
          Also be sure to keep the status icons up-to-date  so that
          the GDP team can easily identify which items need additional
          help.  The <citetitle>DocTable</citetitle> also allows
          people to make announcements and suggestions and to discuss
          issues in the comments section.
        </para>
        <note>
         <title>Note</title>
         <para>
          Note that the information in the
          <citetitle>DocTable</citetitle> may not always be up-to-date
          or accurate.  When you assign yourself to documenting an
          application, make sure you find out the latest status of
          documentation by contacting the application author.  
         </para>
        </note>
      </sect3>
    </sect2>

<!-- ####### Getting Started | Installing And Using DocBook ####### -->

    <sect2 id="docbook">
      <title>Installing and Using DocBook</title>
      <para>
        All documentation for the GNOME project is written in SGML
        using the DocBook DTD. There are many advantages to using
        this for documentation, not least of which is the single
        source nature of SGML. To contribute to the GDP you should
        learn to use DocBook.
      </para>
      <note>
        <title>NOTE</title>
        <para>
          To get started writing for the GDP you do not need to rush
          out and learn DocBook - if you feel it is too much to handle
          for now, you can submit plain ASCII text to the <ulink
          url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
          <citetitle>gnome-doc-list mailing list</citetitle>
          </ulink>and a volunteer will mark it up for you. Seeing your
          document marked up will also be a great way for you to start
          learning DocBook.
        </para>
      </note>
      <sect3 id="installingdocbook">
        <title>Installing DocBook</title>
        <para>
          Download and install the following <ulink
          url="ftp://sourceware.cygnus.com:/pub/docbook-tools/"
          type="ftp">DocBook Tools packages</ulink>: jade, docbook,
          jadetex, sgml-common, and stylesheets. (RPM users should note
          that jade is platform dependent (eg. i386), while the other packages
          are in the <filename class="directory">noarch</filename>
          directory.) You can find more 
          information on DocBook Tools <ulink url="
          http://sourceware.cygnus.com/docbook-tools/"
          type="http">here</ulink>.
        </para>
        <para>
          If you are an <application>Emacs</application> user you may
          want to grab the psgml package as well. This is a major mode
          for editing sgml files in <application>Emacs</application>.
        </para>
      </sect3>
      
      <sect3 id="gdpstylesheets">
        <title>GDP Stylesheets</title>
        <para>
          The GDP uses its own DocBook stylesheets.  To use the GDP
          stylesheets, you should download the file
          <filename>gdp-both.dsl</filename> from the <filename
          class="directory">gnome-docu/gdp/dsssl</filename> module in
          CVS (or from <ulink
          url="http://developer.gnome.org/projects/gdp/stylesheets.html">
          GDP Custom DSSSL Stylesheet</ulink>)and copy it
<!--      into <filename
          class="directory">/usr/lib/sgml/stylesheets</filename>. You
          will need to point DocBook Tools to this stylesheet with the
          <command><option>-d</option></command> option:
          <command>db2html -d /usr/lib/sgml/stylesheets/gdp-both.dsl
          <replaceable>foo.sgml</replaceable></command>. (Creating an
          alias to include this option and path is convenient.)
          Alternately, you could overwrite
          <filename>/usr/lib/sgml/stylesheets/cygnus-both.dsl</filename>
          with <filename>gdp-both.dsl</filename>.
-->
          over the file
          <filename>/usr/lib/sgml/stylesheets/cygnus-both.dsl</filename>.
          Alternately, you can download and install the
          <ulink url="http://people.redhat.com/dcm/software.html"
          type="http">gnome-doc-tools package</ulink> which will set
          up the stylesheets as well as the DTD discussed below.
        </para>

<!--        <note>
          <para>
            The current version of the DocBook Tools command
            <command>db2ps</command> does not have a
            <command><option>-d</option></command> option. In order to
            create PostScript output, you must overwrite
            <filename>/usr/lib/sgml/stylesheets/cygnus-both.dsl</filename>
            with <filename>gdp-both.dsl</filename>.
          </para>
        </note>
-->
      </sect3>
      
      <sect3 id="gdpdtd">
        <title>GDP DTD (PNG Image Support)</title>
        <para>
          Due to some license issues involved with the creation of
          gifs, the GNOME Documentation Project has decided to use the
          PNG image format for all images in GNOME documentation. You
          can read more about the issues involved with gifs at <ulink
          url="http://www.gnu.org/philosophy/gif.html"
          type="http">http://www.gnu.org/philosophy/gif.html</ulink>.
        </para>
        <para>
          The current DocBook DTD(3.1) does not include support for
          embedding PNG images in your documents.  Since the GDP uses
          many screenshots in its documentation, we use our own
          variation on the DocBook DTD which has PNG image support.
          We encourage everybody to use this DTD instead of the
          default DocBook DTD since your source document header and
          your output document appearance subtly vary between the two
          DTD's.  To install the GDP custom DTD with PNG image support
          by hand:
        </para>
        <itemizedlist mark="opencircle">
          <listitem>
            <para>
              Download <ulink
              url="http://www.labs.redhat.com/png/png-support.html">the
              GDP DocBook DTD for PNG support</ulink> and install it
              where you keep your DTD's. (On Red Hat use <filename
              class="directory">/usr/lib/sgml/</filename>.) Note that
              the 3.0 DTD is missing support for the
              <sgmltag>&lt;legalnotice></sgmltag> tag, so it is
              recommended that you use version 3.1
            </para>
          </listitem>
          <listitem override="bullet">
            <para>
              Add the new DTD to your SGML CATALOG file.  The location
              of your SGML CATALOG file may vary depending upon your
              distribution. (On Red Hat it is usually in
              /usr/lib/sgml/CATALOG.) Add the following line to this
              file:
              <programlisting>
PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.0//EN" "png-support-3.0.dtd"
              </programlisting> 
              If you are using the 3.1 DTD, use:
              <programlisting>
PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN" "png-support-3.1.dtd"
              </programlisting> 
            </para>
          </listitem>
        </itemizedlist>
        <para>
          Alternately, you can download and install the
          <ulink url="http://people.redhat.com/dcm/software.html"
          type="http">gnome-doc-tools package</ulink> which will set
          up the custom stylesheets and DTD for you.
        </para>
        <para>
          To include PNG files in your documents, you will need to
          indicate that you are using this special DTD.  To do
          this, use the following headers:
        </para>
        <para>
          Articles:
          <programlisting>
<![CDATA[<!DOCTYPE Article PUBLIC "-//GNOME//DTD DocBook PNG Variant
V1.1//EN"[]>]]>
          </programlisting>
        </para>
        <para>
          Books:
          <programlisting>
<![CDATA[<!DOCTYPE Book PUBLIC "-//GNOME//DTD DocBook PNG Variant
V1.1//EN"[]>]]>
          </programlisting>
        </para>

      </sect3>
      
      <sect3 id="editors">
        <title>Editors</title>
        <para>
          There are many editors on Linux and UNIX systems available
          to you. Which editor you use to work on the sgml documents
          is completely up to you, as long as the editor is able to
          preserve sgml and produce the source in a format that is
          readable by everyone.
        </para>
        <para>
          Probably the two most popular editors available are
          <application>Emacs</application> and
          <application>vi</application>. These and other editors are
          used regularly by members of the GDP. Emacs has a major
          mode, psgml, for editing sgml files which can save you time
          and effort in adding and closing tags. You will find the
          psgml package in DocBook Tools, which is the standard set of
          tools for the GDP. You may find out more about DocBook Tools
          in <xref linkend="installingdocbook" />.
        </para>
      </sect3>
      
      <sect3 id="make-output">
        <title>Creating Something Useful with your Docs</title>
        <para>
          The tools available in DocBook Tools allow you to convert
          your sgml document to many different formats including html
          and Postscript. The primary tool used to do the conversion
          is an application called <application>Jade</application>. In
          most cases you will not have to work directly with
          <application>Jade</application>; Instead,  you will use the
          scripts provided by DocBook Tools.
        </para>
        <para>
          To preview your DocBook document, it is easiest to convert
          it to <filename>html</filename>. If you have installed the
          DocBook tools described above, all you have to do is to run
          the command <prompt>$</prompt><command>db2html
          mydocument.sgml</command>. If there are no sgml syntax
          errors, this will create a directory <filename
          class="directory">mydocument</filename> and place the
          resulting html files in it. The title page of the document
          will typically be
          <filename>mydocument/index.html</filename>.  If you have
          screenshots in your document, you will have to copy these
          files into the <filename
          class="directory">mydocument</filename> directory by
          hand. You can use any web browser to view your document.
          Note that every time you run <command>db2html</command>, it
          creates the <filename
          class="directory">mydocument</filename> directory over, so
          you will have to copy the screenshots over each time.
        </para>
        <para>
          You can also convert your document to PostScript by running
          the command <prompt>$</prompt><command>db2ps
          mydocument.sgml</command>, after which you can print out or
          view the resulting .ps file.  
        </para>
        <note>
          <title>NOTE</title>
          <para>
            The html files you get will not look quite the same as the
            documentation distributed with GNOME unless you have the
            custom stylesheets installed on your machine. DocBook
            Tools' default stylesheets will produce a different look
            to your docs. You can read more about the GDP stylesheets
            in <xref linkend="gdpstylesheets" />.
          </para>
        </note>
      </sect3>
      
      <sect3 id="jadeimages">
        <title>Images in DocBook Tools</title>
        <para>
          If your document uses images you will need to take note of a
          few things that should take place in order for you to make
          use of those images in your output.
        </para>
        <para>
          The DocBook Tools scripts and applications are smart enough
          to know that when you are creating html you will be using
          PNG files and when you are creating Postscript you will be
          using EPS files (you must use EPS with Postscript).
        </para>
        <para>
          Thus, you should never explicitly
          include the extension of the image file, since DocBook
          Tools will automatically insert it for you. For example:
        </para>
        <programlisting>
<![CDATA[
<figure>
 <title>My Image</title>
 <screenshot>
  <screeninfo>Sample GNOME Display</screeninfo>
  <graphic  format="png" fileref="myfile" srccredit="me">
  </graphic>
 </screenshot>
</figure>
]]>     </programlisting>
        <para>
          You will notice in this example that the file
          <filename>myfile.png</filename> was referred to as simply
          <filename>myfile</filename>. Now when you run
          <command>db2html</command> to create an html file, it will
          automatically look for <filename>myfile.png</filename> in
          the directory.
        </para>
        <para>
          If you want to create PostScript output, you will need to create an
          EPS version of your image file to be displayed in the
          PostScript file. There is a simple script available which
          allows you to change a PNG image into an EPS file
          easily. You can download this file - img2eps - from <ulink
          url="http://people.redhat.com/dcm/sgml.html"
          type="html">http://people.redhat.com/dcm/sgml.html</ulink>
          (look for the img2eps section).  Note that this script is
          included in the gnome-doc-tools package, so if you are using
          this package, you should already have
          <command>img2eps</command> on you system.
        </para>
      </sect3>
      
      <sect3 id="moredocbookinfo">
        <title>Learning DocBook</title>
        <para>
          There are many resources available to help you learn DocBook.
          The following resources on the web are useful for learning
          DocBook:
        </para>
        <itemizedlist mark="bullet">
          <listitem>
            <para>
              <ulink url="http://www.docbook.org"
              type="http">http://www.docbook.org</ulink>  - Norman
              Walsh's <citetitle>DocBook: The Definitive
              Guide</citetitle>.  Online O'Reilly book on using
              DocBook. Contains an excellent element reference. May be
              too formal for a beginner.
            </para>
          </listitem>
          <listitem>
            <para>
              <ulink
              url="http://www.oswg.org/oswg-nightly/oswg/en_US.ISO_8859-1/articles/DocBook-Intro/docbook-intro/index.html"
              type="http">A Practical Introduction to DocBook</ulink>
              - The Open Source Writers Group's introduction to using
              DocBook. This is an excellent HOW-TO type article on
              getting started.
            </para>
          </listitem>
          <listitem>
            <para>
              <ulink
              url="http://nis-www.lanl.gov/~rosalia/mydocs/docbook-intro/docbook-intro.html"
              type="http">Getting Going with DocBook: Notes for
              Hackers</ulink> - Mark Galassi's introduction to DocBook
              for hackers. This has to be one of the first
              introductions to DocBook ever - still as good as it ever
              was.
            </para>
          </listitem>
          <listitem>
            <para>
              <ulink type="http" url="http://www.freebsd.org/tutorials/docproj-primer/">
              FreeBSD Documentation Project Primer for New
              Contributors</ulink> - FreeBSD documentation project
              primer. Chapter 4.2 provides a very good introduction to
              writing documentation using DocBook. Note that it also
              describes some custom extensions of DocBook;
              fortunately, they are clearly marked as such.
            </para>
          </listitem>
        </itemizedlist>
        <para>
          Norman Walsh's book is also available in print.
        </para>
        <para>
          The following sections of this document are designed to help
          documentation authors write correct and consistent DocBook:
        </para>
        <itemizedlist mark="bullet">
          <listitem>
            <para>
              <xref linkend="docbookbasics" /> - Descriptions of
              commonly used DocBook tags.
            </para>
          </listitem>
        </itemizedlist>
        <para>
          You may also discuss specific DocBook questions with GDP
          members on the #docs IRC channel at irc.gnome.org and on the
          gnome-doc-list mailing list.
        </para>
      </sect3>
    </sect2>
   
<!-- ####### Getting Started | GDP Document Examples ####### -->
<!--
    <sect2 id="examples">
      <title>GDP Document Examples</title>
      <para>
        Examples of various types of GNOME documents are found in
        <xref linkend="examples" />.  There is also an example GNOME
        application with documentation called
        <application>gnome-hello</application> in GNOME cvs.
      </para>
    </sect2>
-->
<!-- ####### Getting Started | GDP Document Templates ####### -->

    <sect2 id="gdptemplates">
      <title>GDP Document Templates</title>
      <para>
        Templates for various types of GNOME documents are found in
        <xref linkend="templates" />.  They are kept in CVS in
        gnome-docu/gdp/templates. The easiest source to get them from
        is probably the <ulink
        url="http://developer.gnome.org/projects/gdp/templates.html" 
        type="http">GDP
        Document Templates</ulink> web page, which is typically kept
        completely up-to-date with CVS and has a basic description of
        each file from CVS.
      </para>
    </sect2>

<!-- ####### Getting Started | Screenshots ####### -->

    <sect2 id="screenshots">
      <title>Screenshots</title>
      <para>
        Most GNOME documents will have screenshots of the particular
        applet, application, GNOME component, or widget being
        discussed.  As discussed above in <xref linkend="gdpdtd"/> you
        will need to install the special GDP DocBook DTD which
        supports PNG images, the format used for all images in GNOME
        documentation. For the basic DocBook structure used to insert
        images in a document, see <xref linkend="jadeimages"/> above.
      </para>
      <sect3 id="screenshotappearance">
        <title>Screenshot Appearance</title>
        <para>
          For all screenshots of windows that typically have border
          decorations (e.g. applications and dialogs, but not applets
          in a <interface>panel</interface>), GDP standards dictate
          the appearance of the window.  (This is to minimize possible
          confusion to the reader, improve the appearance of GNOME
          documents, and guarantee the screenshot is readable when
          printed.) All screenshots should be taken with the SawFish
          (formerly known as Sawmill) window manager using the
          MicroGui theme and Helvetica 12pt font. (A different window
          manager can be used provided the MicroGui theme is available
          for this window manager and the appearance is identical to
          that when using the SawFish window manager.) The default
          GTK+ theme(gtk) and font (Helvetica 12 pt) should be used
          for all screenshots.  If you are unable to provide
          screenshots in this form, you should create screenshots as
          you wish them to appear and send them to the
          <ulink url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
          <citetitle>gnome-doc-list mailing list</citetitle> </ulink>
          requesting a GDP member reproduce these screenshots in the
          correct format and email them to you.
        </para>
      </sect3>
      <sect3 id="screenshottools">
        <title>Screenshot Tools</title>
        <para>
          There are many tools for taking screenshots in
          GNOME/Linux. Perhaps the most convenient is the
          <application>Screen-Shooter Applet</application>. Just click
          on the window icon in the applet and then on the window you
          would like to take a screenshot of. (Note that
          at the time of this writing, PNG images taken by
          screenshooter do not appear properly in
          <application>Netscape</application> or the
          <application>GNOME Help Browser</application>.  You
          should save your screenshot as a GIF and
          then use <command>convert filename.gif
          filename.png</command>.) For applets
          in a <interface>Panel</interface>,
          <application>xv</application> can be used to crop the
          screenshot to only include the relevant portion of the
          <interface>Panel</interface>. Note that
          <application>xv</application> and 
          <application>gimp</application> can both be used for taking
          screenshots, cropping screenshots, and converting image
          formats. 
        </para>
      </sect3>
      <sect3 id="screenshotfiles">
        <title>Screenshot Files</title>
        <para>
          Screenshots should be kept in the main documentation
          directory with your SGML file for applets, or should be
          kept in a directory called "figs" for application and other
          documentation.  After you use <command>db2html</command> to
          convert your SGML file to HTML (see <xref
          linkend="make-output"/>), you will need to copy your
          screenshots (either the individual PNG files for applet
          documentation, or the whole "figs" directory for other
          documentation) into the newly created HTML directory.  Note
          that every time you use <command>db2html</command> the HTML
          directory is erased and rewritten, so do not store your only
          copy of the screenshots in that directory.  If you wish to
          create PostScript or PDF output, you will need to manually
          convert the PNG images to EPS as described in <xref
          linkend="jadeimages"/>, but will not need to copy these
          images from their default location, as they are included
          directly into the output(PostScript of PDF) file.
        </para>
      </sect3>
    </sect2>


<!-- ####### Getting Started | Application Bugs ####### -->

    <sect2 id="applicationbugs">
      <title>Application Bugs</title>
      <para>
        Documentation authors tend to investigate and test applets and
        applications more thoroughly than most 
        users.  Often documentation authors will discover one or
        more bugs in the software.  These bugs vary from small ones,
        such as mis-spelled words or missing
        <interface>About</interface> dialogs in the menu, to large
        ones which cause the applet to crash.  As all users, you
        should be sure to report these bugs so that application
        developers know of them and can fix them.  The easiest way to
        submit a bug report is by using the <application>Bug
        Buddy</application> applet which is part of the gnome-applets
        package.  
      </para>
    </sect2>


<!-- ####### Getting Started | Using CVS  ####### -->

    <sect2 id="cvs">
      <title>Using CVS</title>
      <para>
        CVS (Concurrent Versions System) is a tool that allows
        multiple developers to concurrently work on a set of
        documents, keeping track of the modifications made by each
        person.  The files are stored on a server and each developer
        checks files out, modifies them, and then checks in their
        modified version of the files.  Many GNOME programs and
        documents are stored in CVS.  The GNOME CVS server allows
        users to anonymously check out CVS files. Most GDP members
        will need to use anonymous CVS to download the most up-to-date
        version of documentation or programs.  Modified documents will
        typically be emailed to the the application developer. Core
        GDP members may also be granted login CVS privileges so they
        may commit modified files directly to CVS.
      </para>

      <sect3 id="anonymouscvs">
        <title>Anonymous CVS</title>
        <para>
          To anonymously check out documents from CVS, you must first
          log in.  From the bash shell, you should set your CVSROOT
          shell variable with <command>  export
          CVSROOT=':pserver:anonymous@anoncvs.gnome.org:/cvs/gnome'</command>
          and then login with <command>cvs login</command>(there is no
          password, just hit return). As an example, we will use the
          "gnome-docu/gdp" module which contains this and several
          other documents. To check these documents out for the first
          time, type <command>cvs -z3 checkout
          gnome-docu/gdp</command>. After you have this document
          checked out and you would like to download any updates on
          the CVS server, use <command>cvs -z3 update -Pd</command>.
        </para>
      </sect3>

      <sect3 id="logincvs">
        <title>Login CVS</title>  <para>  If you have been given a
        login for the GNOME CVS server,  you may commit your file
        modifications to CVS.  Be sure to read the following section
        on CVS etiquette before making any commits to CVS.  To log in
        to the CVS server as user
        <command><replaceable>username</replaceable></command> with a
        password, you must first set your CVSROOT shell variable with
        <command> export
        CVSROOT=':pserver:<replaceable>username</replaceable>@cvs.gnome.org:/cvs/gnome'</command>.
        Log in with <command>cvs login</command> and enter your
        password. You may check out and update modules as described
        above for anonymous CVS access.  As a login CVS user, you may
        also check modified versions of a file into the CVS server.
        To check
        <command><replaceable>filename</replaceable></command> into
        the CVS server, type <command>cvs -z3 commit
        <replaceable>filename</replaceable></command>. You will be
        given a vi editor window to type in a brief log entry,
        summarizing your changes.  The default editor can be changed
        using the <varname>EDITOR</varname> environment variable or
        with the <command><option>-e</option></command> option. You
        may also check in any modifications to files in the working
        directory and subdirectories using <command>cvs -z3
        commit</command>.  To
        add a new file to the CVS server, use <command>cvs -z3 add
        <replaceable>filename</replaceable></command>, followed by the
        commit command.
        </para>
      </sect3>

      <sect3 id="cvsetiquette">
        <title>CVS Etiquette</title>
        <para>
          Because files in CVS are typically used and modified by
          multiple developers and documentation authors, users should
          exercise a few simple practices out of courtesy towards the
          other CVS users and the project leader.  First, you should
          not make CVS commits to a package without first discussing
          your plans with the project leader.  This way, the project
          leader knows who is modifying the files and generally, what
          sort of changes/development is being done.  Also, whenever a
          CVS user commits a file to CVS, they should make an entry in
          the CVS log and in the <filename>ChangeLog</filename> so
          that other users know who is making modifications and what
          is being modified.  When modifying files created by others,
          you should follow the indentation scheme used by the initial
          author.
        </para>
      </sect3>
    </sect2>
  </sect1>
  
<!-- ################# The GNOME Documentation System###############
-->

  <sect1 id="gnomedocsystem">
    <title>The GNOME Documentation System</title>

<!-- ####### The GNOME Documentation System | The GNOME Help Browser
####### -->
    
    <sect2 id="gnomehelpbrowser">
      <title>The GNOME Help Browser</title>
      <para>
        At the core of the GNOME help system is the <application>GNOME
        Help Browser</application>. The <application>Help
        Browser</application> provides a unified interface to several
        distinct documentation systems on Linux/Unix systems: man
        pages, texinfo pages, Linux Documentation Project(LDP)
        documents, GNOME application documentation, and other GNOME
        documents.
      </para>
      <para>
        The <application>GNOME Help Browser</application> works by
        searching standard directories for documents which are to be
        presented.  Thus, the documentation that appears in the GHB is
        specific to each computer and will typically only represent
        software that is installed on the computer.
      </para>
    </sect2>

<!-- ####### The GNOME Documentation System | The GNOME Help Browser
####### -->

    <sect2 id="gnomehelpbrowser2">
      <title>The GNOME Help Browser (GNOME-2.0)</title> <para> In
      GNOME 2.0, the <application>GNOME Help Browser</application>
      will be replaced by <application>Nautilus</application>.
      Nautilus will be the file manager/graphical shell for GNOME 2.0
      and will also implement a more sophisticated help system than
      that used by the <application>GNOME Help Browser</application>
      used in GNOME 1.0.  It will read and display DocBook files
      directly, avoiding the need for duplicating documents in both
      DocBook and HTML formats.  Its display engine for DocBook will
      be much faster than running <application>jade</application> to
      convert to HTML for rendering.  Because it uses the original
      DocBook source for documentation, it will be possible to do more
      sophisticated searching using the meta information included in
      the documents.  And since Nautilus is a virtual file system
      layer which is Internet-capable, it will be able to find and
      display documents which are on the web as well as those on the
      local file system. For more information on
      <application>Nautilus</application>, visit the #nautilus IRC
      channel on irc.gnome.org.  </para>
    </sect2>

<!-- ####### The GNOME Documentation System | GNOME On-The-Fly
Documentation Generation  ####### -->
    
    <sect2 id="gnomehelponthefly">
      <title>Dynamic Document Synthesis(GNOME-2.0)</title>
      <para>
        GNOME uses the documentation presented by all the various
        GNOME components and applications installed on the system to
        present a complete and customized documentation environment
        describing only components which are currently installed on a
        users system.  Some of this documentation, such as the manuals
        for applets, will be combined in such a way that it appears to
        be a single document.
      </para>
      <para>
        By using such a system, you can be sure that any GNOME app you
        install that has documentation will show up in the index,
        table of contents, any search you do in the help browser.
      </para>
    </sect2>
    
<!-- ####### The GNOME Documentation System | The GNOME Documentation
Components  ####### -->

    <sect2 id="gnomehelpcomponents">
      <title>The GNOME Documentation Components</title>

      <sect3 id="applicationmanualsintro">
        <title>Application Manuals</title>
        <para>
          Every GNOME application should have an application manual.
          An application manual is a document specific to the
          particular application which explains the various windows
          and features of the application.  Application Manuals
          typically use screenshots (PNG format) for clarity.  Writing
          application manuals is discussed in more detail in <xref
          linkend="writingapplicationmanuals" /> below.
        </para>
      </sect3>

      <sect3 id="applicationhelpintro">
        <title>Application Help</title>
        <para>
          Applications should have a <guibutton>Help</guibutton>
          button on screens on which users may need help.  These
          <guibutton>Help</guibutton> buttons should pull up the
          default help browser, determined by the
          <varname>ghelp</varname> URL Handler (configured using the
          <application>Control Center</application>), typically the
          <application>GNOME Help Browser</application>.  The help
          browser should show either the first page of the application
          manual, or else the relevant page thereof. Application help
          is described in more detail in <xref
          linkend="applicationhelpbuttons" /> below.
        </para>
      </sect3>

      <sect3 id="contextsensitivehelpintro">
        <title>Application Context Sensitive Help (coming in
        GNOME-2.0)</title>
        <para>
          Context sensitive help is a system which will allow the user
          to query any part (button, widget, etc.) of an application
          window.  This is done by either entering a CS Help mode by
          clicking on an icon or by right clicking on the application
          part and selecting "What's This" or whatever is decided on
          at the time.  Context sensitive help is described in more
          detail in <xref linkend="writingcontextsensitivehelp" />
          below.
        </para>
      </sect3>

      <sect3 id="userguide">
        <title>The GNOME User Guide</title>
        <para>
          The <citetitle>GNOME User Guide</citetitle> describes the
          GNOME desktop environment and core components of GNOME such
          as the <application>panel</application> and
          <application>control center</application>. In GNOME 1.x this
          was the main and only source of documentation. In GNOME 2.0
          this will become a document for the web and for printing
          that is derived from various parts chosen in the system that
          are necessary for the new user to understand.
        </para>
      </sect3>

      <sect3 id="userdocs">
        <title>User Documents</title>
        <para>
          Aside from the <citetitle>GNOME User Guide</citetitle>,
          there are several other documents to help GNOME users learn
          GNOME, including the <citetitle>GNOME FAQ</citetitle>,
          <citetitle>GNOME Installation and Configuration
          Guide</citetitle>, and the <citetitle>GNOME Administrators
          Guide</citetitle>.
        </para>
      </sect3>

      <sect3 id="developerdocs">
        <title>Developer Documents</title>
        <para>
          There are many White Papers, Tutorials, HOWTO's and FAQ's to
          make programming GNOME and GNOME applications as easy as
          possible.
        </para>
        <para>
          API documentation is also available for the GNOME libraries. This is
          detailed documentation of the code that is used to build GNOME
          apps. You can keep up with the GNOME API docs on the <ulink
          url="http://developer.gnome.org/doc/API/" type="http">GNOME API
          Reference</ulink> page.
        </para>
      </sect3>

      <sect3 id="projectdocs">
        <title>Project Documents</title>
        <para>
          Some GNOME projects have documentation to maintain
          consistency in their product and to help new contributors
          get up to speed quickly. Among these are the GDP documents,
          such as the one you are reading now.
        </para>
      </sect3>
    </sect2>
  </sect1>
  
  
<!-- ################# DocBook Basics ############### -->

  <sect1 id="docbookbasics">
    <title>DocBook Basics </title>  
<!-- ####### DocBook Basics | Introduction to DocBook ####### -->

    <sect2 id="introtodocbook">
      <title>Introduction to DocBook</title>
      <para>
        To understand DocBook, a basic understanding of SGML is
        helpful. SGML stands for Standard General Markup Language and
        is one of the first markup languages every created. HTML is
        actually derived from SGML and XML is a subset of SGML.  SGML
        uses what is called a Document Type Definition to specify
        <emphasis>elements</emphasis> which are contained between
        brackets, &lt; and >. Text is marked by both beginning and
        ending elements, for example in the DocBook DTD, one denotes a
        title with <sgmltag>&lt;title></sgmltag>The
        Title<sgmltag>&lt;/title></sgmltag>.
      </para>
      <para>
        The DTD (in the case of the GDP, DocBook) defines rules for how the
        elements can be used. For example, if one element can only be used when
        embedded within another, this is defined in the DTD.
      </para>
      <para> 
	An SGML file is just a plain ASCII file containing the text
	with the markup specified above. To convert it  to some easily
	readable format, you need special tools. The GDP uses <emphasis>DocBook
        Tools</emphasis>, a free package of utilities for working with DocBook
        which includes <emphasis>Jade</emphasis>, which does the SGML/DSSL
        parsing. You can read more about DocBook Tools in <xref
        linkend="installingdocbook" />. 
      </para>
      <para>
        The final appearance of the output (e.g. PostScript or HTML)
        is determined by a
        <emphasis>stylesheet</emphasis>. Stylesheets are files,
        written in a special language (DSSSL &mdash; Document Style
        Semantics and Specification Language), which  specify the
        appearance of various DocBook elements, for example,
        what fonts to use for titles and various inline elements, page
        numbering style, and much more. DocBook tools come with a
        collection of stylesheets (Norman Walsh's modular
        stylesheets); GNOME Document Project uses some customized
        version of this stylesheets &mdash; see <xref
        linkend="gdpstylesheets"/>.   
      </para>
      <para>
        The advantage of specifying the <emphasis>structure</emphasis>
        of a document with SGML instead of specifying the
        <emphasis>appearance</emphasis> of the document with a typical
        word processor, or with html, is that the resulting document
        can be processed in a variety of ways using the structural
        information.  Whereas formatting a document for appearance
        assumes a medium (typically written text on a standard-sized
        piece of paper), SGML can be processed to produce output for a
        large variety of media such as text, postscript, HTML,
        Braille, audio, and potentially many other formats.
      </para>
      <para>
        Using 'content' as the elements to define the text of a document also
        allows for search engines to make use of the actual elements to make a
        "smarter search". For example, if you are searching for all documents
        written by the author "Susie" your search engine could be made smart
        enough to only search &lt;author> elements, making for a faster and more
        accurate search.
      </para>
      <para>
        Since the overall appearance of the output is determined not by the DTD
        or the SGML document, but rather by a stylesheet, the appearance of a
        document can be easily changed just by changing the stylesheet. This
        allows everyone in the project to create documents that all look the
        same.
      </para>
      <para>
        As stated before, the GDP uses the DocBook DTD.  For a list of
        introductory and reference resources on DocBook, see <xref
        linkend="resources" />.  The following sections also provide
        convenient instructions on which markup tags to use in various
        circumstances.  Be sure to read <xref linkend="conventions" />
        for GDP documentation-specific guidelines.
      </para>
    </sect2>
    
 <!-- ######  DocBook Basics | XML and SGML       ########--> 
 <sect2 id="xml">
      <title>XML and SGML</title>

      <para> In not so distant future (probably before GNOME 2.0),
      DocBook itself and GNOME Documentation project will migrate from
      SGML to XML. This transition should be relatively painless:
      (almost) all DocBook tags will remain the same. However, XML has
      stricter syntax rules than SGML; thus, some constructions which
      are valid in SGML will not be valid in XML. Therefore, to be
      ready for this transistion, it is <emphasis>strongly
      advised</emphasis> that the documentation writers conform to XML
      syntax rules. Here are most important differences:
      </para>
	
      <variablelist>
	  <varlistentry>
	    <term> <emphasis>Minimization</emphasis></term> 
	    <listitem>
	    
	    <para>
	      It is possible with some implementations of SGML to use
	      minimizations to close elements in a document by using
	      &lt;/>, for example:
	      <literal><sgmltag>&lt;title></sgmltag>The
		Title<sgmltag>&lt;/></sgmltag></literal>. This is not
              allowed in XML. You can use <command>sgmlnorm</command> command,
              included in DocBook Tools package, to expand minimized tags;
              if you are using <application>Emacs</application> with psgml
              mode, you can also use menu command
          <menuchoice>
             <guimenu>Modify</guimenu>
             <guimenuitem>Normalize</guimenuitem>
          </menuchoice>.
         </para> 
	    </listitem>
	    </varlistentry>
	  <varlistentry>
	    <term> <emphasis>Self-closing tags</emphasis></term> 
	    <listitem>
 
         <para>
            Also, in SGML some tags are allowed not to have closing
            tags.  For example, it is legal for
            <sgmltag>&lt;xref></sgmltag> not to have a closing tag: 
            <literal><sgmltag>&lt;xref 
                   linkend="someid"></sgmltag></literal>. In
            XML, it is illegal; instead, you should use  
            <literal><sgmltag>&lt;xref 
                   linkend="someid"/></sgmltag></literal> (note the
            slash!).
          </para> 
  </listitem>
  </varlistentry>

	<varlistentry>
	    <term> <emphasis>Case sensitive tags</emphasis></term> 
	    <listitem>
	    <para>
	      In XML, unlike SGML, tags are case-senstive
	      <sgmltag>&lt;title></sgmltag> and
	      <sgmltag>&lt;TITLE></sgmltag> are different tags!
	      Therefore, please always use lowercase tags (except for
	      things like <literal>DOCTYPE, CDATA</literal> and
	      <literal>ENTITY</literal>, which are not DocBook tags). 
	    </para>
	  </listitem>
	</varlistentry>



</variablelist> 
</sect2>



    <!-- ####### DocBook Basics | Structure Elements ####### -->

    
    <sect2 id="structure"> <title> Structure Elements</title>

      <sect3 id="section">
        <title>Sections and paragraphs</title>
        <para>
          Top-level element of a book body must be
          <sgmltag>&lt;chapter></sgmltag>; it may contain one or more
          <sgmltag>&lt;sect1></sgmltag>, each of them may contain
          <sgmltag>&lt;sect2></sgmltag> and so on up to
          <sgmltag>&lt;sect5></sgmltag>. The top-level element of an
          article body is always
          <sgmltag>&lt;sect1></sgmltag>. Regardless of which elements
          you use, give each structural element a unique id, so that
          you can link to it. For usage example, see the template.
        </para>
        <para> Please try to avoid using deeply nested sections; for
          most situations, <sgmltag>&lt;sect1></sgmltag> and
          <sgmltag>&lt;sect2></sgmltag> should be sufficient. If not,
          you probably should split your <sgmltag>&lt;sect1></sgmltag>
          into several smaller ones.
        </para>
        <para> Use the tag <sgmltag>&lt;para></sgmltag> for
          paragraphs, even if there is only one paragraph in a
          section&mdash;see template for examples.
        </para>
      </sect3>

      <sect3 id="notes">
        <title>Notes, Warnings, And Tips</title>
        <para>
          For notes, tips, warnings, and important information, which
          should be set apart from the main text (usually as a
          paragraph with some warning sign on the margin), use tags
          <sgmltag>&lt;note></sgmltag>, <sgmltag>&lt;tip></sgmltag>,
          <sgmltag>&lt;warning></sgmltag>,
          <sgmltag>&lt;important></sgmltag> respectively. For example:
          <programlisting>
<![CDATA[
<tip>
 <title>TIP</title>
 <para>
  To speed up program compilation, use <application>gcc</application>
  compiler with Pentium optimization.
 </para>
</tip>]]> </programlisting>  produces
        </para>
        <tip id="extip">
          <title>TIP</title>
          <para>
            To speed up program compilation, use
            <application>gcc</application> compiler with Pentium
            optimization.  </para>
        </tip>
        <para>
          Note that this should not be inside a
          <sgmltag>&lt;para></sgmltag> but between paragraphs.
        </para>
      </sect3>
      <sect3 id="figures">
        <title> Screenshots and other figures</title>
        <para>
          To include screenshots and other figures, use the following
          tags:
          
          <programlisting>
<![CDATA[
<figure id="shot1">
 <title>Screenshot</title>
 <screenshot>
  <screeninfo>Screenshot of a program</screeninfo>
  <graphic format="PNG"  fileref="figures/example_screenshot" srccredit="ME">
  </graphic>
 </screenshot>
</figure>]]>
          </programlisting>
          replacing <filename>example_screenshot</filename> with the
          actual file name (without extension). The result will look like this:
          
          <figure id="shot1">
            <title>Screenshot</title>
            <screenshot>
              <screeninfo>Screenshot of a program</screeninfo>
              <graphic format="PNG"
		       fileref="figures/example_screenshot" srccredit="ME"/>
              
            </screenshot>
          </figure>
        </para>
        <note>
          <title>NOTE</title>
          <para>
            Notice in this example that the screenshot file name does
            not include the file type extension &mdash; to find out
            why, please read <xref linkend="jadeimages" />.
          </para>
        </note>          
      </sect3>
      <sect3 id="listing">
        <title>Program listings and terminal session</title> <para>
          To show a file fragment&mdash;for example, program
          listing&mdash;use <sgmltag>&lt;programlisting></sgmltag> tag:
          <programlisting>
<![CDATA[
<programlisting>
[Desktop Entry] 
Name=Gnumeric spreadsheet
Exec=gnumeric 
Icon=gnome-gnumeric.png 
Terminal=0
Type=Application
</programlisting>]]>
          </programlisting>
          which produces
          <programlisting>
[Desktop Entry] 
Name=Gnumeric spreadsheet 
Exec=gnumeric
Icon=gnome-gnumeric.png 
Terminal=0 
Type=Application
          </programlisting>
          As a matter of fact, all examples in this document were
          produced using <sgmltag>&lt;programlisting></sgmltag>.
        </para>
        <para>
          To show a record of terminal session&mdash;i.e., sequence of
          commands entered at the command line&mdash;use
          <sgmltag>&lt;screen></sgmltag> tag:
          <programlisting>
<![CDATA[
<screen>
<prompt>bash$</prompt><userinput>make love</userinput> 
make: *** No rule to make target `love'. Stop.
</screen>]]>
          </programlisting>
          which produces
          <screen>
<prompt>bash$</prompt><userinput>make love</userinput>  
make: *** No rule to make target `love'.  Stop.
          </screen>
          Note the use of tags <sgmltag>&lt;prompt></sgmltag> and
          <sgmltag>&lt;userinput></sgmltag> for marking system prompt
          and commands entered by user.
          <note>
            <title>NOTE</title>
            <para>
              Note that both <sgmltag>&lt;programlisting></sgmltag>
              and <sgmltag>&lt;screen></sgmltag> preserve linebreaks,
              but interpret SGML tags (unlike LaTeX
              <markup>verbatim</markup> environment). Take a look at
              the source of this document to see how you can have SGML
              tags literally shown but not interpreted,
            </para>
          </note>
        </para>
      </sect3>
      <sect3 id="lists">
	<title> Lists</title>
	<para>
	  The most common list types  in DocBook are
	  <sgmltag>&lt;itemizedlist></sgmltag>,
	  <sgmltag>&lt;orderedlist></sgmltag>, and 
	  <sgmltag>&lt;variablelist></sgmltag>.
	</para>
	<variablelist>
	  <varlistentry>
	    <term> <sgmltag>&lt;itemizedlist></sgmltag></term> 
	    <listitem><para> 
		This is the simplest unnumbered list, parallel to
	    <sgmltag>&lt;ul></sgmltag> in HTML. Here is an example: 
		<programlisting>
<![CDATA[
<itemizedlist>
  <listitem>
    <para>
      <guilabel>Show backup files</guilabel> &mdash; This will
      show any backup file that might be on your system.
    </para>
  </listitem>
  <listitem>
    <para>
      <guilabel>Show hidden files</guilabel> &mdash; This will
      show all "dot files" or files that begin with a dot.  This
      files typically include configuration files and directories.
    </para>
  </listitem>
  <listitem>
    <para>
      <guilabel>Mix files and directories</guilabel> &mdash; This
      option will  display files and directories in the order you
      sort them instead of 
      always having directories shown above files.
    </para>
   </listitem>
</itemizedlist> 
]]>
		</programlisting>
		and output:
                </para>
		<itemizedlist>
		  <listitem>
		    <para>
		      <guilabel>Show backup files</guilabel> &mdash;
		      This will show any backup file that might be on
		      your system.
		    </para>
		  </listitem>

		  <listitem>
		    <para>
		      <guilabel>Show hidden files</guilabel> &mdash;
		      This will show all "dot files" or files that
		      begin with a dot.  This files typically include
		      configuration files and directories.
		    </para>
		  </listitem>

		  <listitem>
		    <para>
		      <guilabel>Mix files and directories</guilabel>
		      &mdash; This option will display files and
		      directories in the order you sort them instead
		      of always having directories shown above files.
		    </para>
		  </listitem>
		</itemizedlist>
              <para> Note the use of <sgmltag>&amp;mdash;</sgmltag>
              for long dash (see <xref linkend="specsymb" />). Also,
              please note that the result looks much nicer because the
              terms being explained (<guilabel>Show backup
              files</guilabel>, etc.) are set in a different font. In
              this case, it was achieved by using <link
              linkend="gui"><sgmltag>&lt;guilabel></sgmltag></link>
              tag. In other cases, use appropriate tags such as
              <link linkend="gui"><sgmltag>&lt;guimenuitem></sgmltag></link>,
              <link
              linkend="filenames"><sgmltag>&lt;command></sgmltag></link>,
              or &mdash; if none of
              this applies &mdash; use
              <link linkend="gui"><sgmltag>&lt;emphasis></sgmltag></link>.
	      </para>
	    </listitem>
	  </varlistentry>
	  <varlistentry>
	    <term> <sgmltag>&lt;orderedlist></sgmltag></term> 
	    <listitem><para>
		This list is completely analogous to
		<sgmltag>&lt;itemizedlist></sgmltag> and has the same
		syntax, but  it produces numbered list. By default,
		this list uses Arabic numerals for numbering entries;
		you can override this using <sgmltag>numeration</sgmltag>,
		for example <sgmltag>&lt;orderedlist
		  numeration="lowerroman"></sgmltag>. Possible values of
		these attribute are <sgmltag>arabic</sgmltag>,
		<sgmltag>upperalpha</sgmltag>,
		<sgmltag>loweralpha</sgmltag>,
		<sgmltag>upperroman</sgmltag>,
		<sgmltag>lowerroman</sgmltag>.
	      </para></listitem>
	  </varlistentry>

	  <varlistentry>
	    <term> <sgmltag>&lt;variablelist></sgmltag></term>
	    <listitem><para> This list is used when each entry is
	    rather long, so it should be formatted as a block of text
	    with some subtitle, like a small subsection.  The
	    <sgmltag>&lt;variablelist></sgmltag> is more complicated
	    than itemizedlists, but for larger blocks of text, or when
	    you're explaining or defining something, it's best to use
	    them.  Their greatest advantage is that it's easier for a
	    computer to search.  The lines you are reading now were
	    produced by <sgmltag>&lt;variablelist></sgmltag>. The
	    source looked liked this:
		<programlisting>
<![CDATA[
<variablelist>
  <varlistentry>
    <term> <sgmltag>&lt;itemizedlist></sgmltag></term> 
    <listitem><para> 
	This is the simplest unnumbered list, parallel to
        <sgmltag>&lt;ul></sgmltag> in HTML. Here is an example:...
    </para></listitem>
    </varlistentry>
    <varlistentry>		 
	<term> <sgmltag>&lt;orderedlist></sgmltag></term>
     <listitem><para>	
	This list is completely analogous to
	<sgmltag>&lt;itemizedlist></sgmltag> 
    </para></listitem>
    </varlistentry>
    <varlistentry>		 
	<term> <sgmltag>&lt;variablelist></sgmltag></term>
     <listitem><para>	
		This list is used when each entry is rather long,...
    </para></listitem>
    </varlistentry>
</variablelist>        
]]>
		</programlisting>		
		</para>
	    </listitem>
	  </varlistentry>
	</variablelist>
	<para>
	Lists can be nested; in this case, the stylesheets
	are smart enough to change the numeration (for
	<sgmltag>&lt;orderedlist></sgmltag>) or marks of each entry
	(in  <sgmltag>&lt;itemizedlist></sgmltag>) for sub-lists
	</para>
      </sect3>

    </sect2>

<!-- ####### DocBook Basics | Inline Elements ####### -->

    <sect2 id="inline">
      <title>Inline Elements</title>

      <sect3 id="gui">
        <title>GUI elements</title>
        <itemizedlist>
          <listitem>
            <para>
              <sgmltag>&lt;guibutton></sgmltag> &mdash; used for
              buttons, including checkbuttons and radio buttons
            </para>
          </listitem>
          
          <listitem>
            <para>
              <sgmltag>&lt;guimenu></sgmltag>, 
              <sgmltag>&lt;guisubmenu></sgmltag> &mdash;used for 
	      top-level menus and submenus
              respectively, for example <literal><![CDATA[
              <guisubmenu>Utilities</guisubmenu> submenu of the
              <guimenu>Main Menu</guimenu>]]></literal>
            </para>
          </listitem>
          
          <listitem>
            <para>
              <sgmltag>&lt;guimenuitem></sgmltag>&mdash;an entry in a
              menu
            </para>
          </listitem>
          
          <listitem>
            <para>
              <sgmltag>&lt;guiicon></sgmltag>&mdash;an icon
            </para>
          </listitem>
          
          <listitem>
            <para>
              <sgmltag>&lt;guilabel></sgmltag>&mdash;for items which have
              labels, like tabs, or bounding boxes. 
            </para>
          </listitem>
          <listitem>
            <para>
              <sgmltag>&lt;interface></sgmltag>&mdash; for most everything
              else... a window, a dialog box, the Panel, etc.
            </para>
          </listitem>
        </itemizedlist>
        <para>
          If you need to refer to a sequence of menu choices, such as
          <menuchoice>
            <guimenu>Main Menu</guimenu>
            <guisubmenu>Utilities</guisubmenu> <guimenuitem>GNOME
            terminal</guimenuitem>
          </menuchoice>
          there is a special construction for this, too:
          <programlisting>
<![CDATA[
<menuchoice>
 <guimenu>Main Menu</guimenu> <guisubmenu>Utilities</guisubmenu>
 <guimenuitem>GNOME terminal</guimenuitem> </menuchoice>]]>
          </programlisting>
        </para>
      </sect3>

      <sect3 id="links">
        <title>Links and references</title>
        <para>
          To refer to another place in the same document, you can use
          tags <sgmltag>&lt;xref></sgmltag> and
          <sgmltag>&lt;link></sgmltag>. The first of them
          automatically inserts the full name of the element you refer
          to (section, figure, etc.), while the second just creates a
          link (in HTML output). Here is an example:
          <programlisting>
<![CDATA[An example of a <link linkend="extip">tip</link> was given in
<xref linkend="notes" />.  ]]>
          </programlisting>
          which produces: An example of a <link
          linkend="extip">tip</link> was given in  <xref
          linkend="notes" />.
        </para>
        <para>
          Here <sgmltag>notes</sgmltag> and <sgmltag>extip</sgmltag>
          are the id attributes of <xref linkend="notes" /> and of the
          example of a tip in it.
        </para>
        <para>  To produce a link  to an external source, such as a
          Web page or a local file, use <sgmltag>&lt;ulink></sgmltag>
          tag, for example:
          <programlisting>
<![CDATA[ To find more about GNOME, please visit <ulink type="http"
url="http://www.gnome.org">GNOME Web page</ulink> ]]>
          </programlisting>
          which produces:  To find more about GNOME, please visit
          <ulink type="http" url="http://www.gnome.org">The GNOME Web
          Site</ulink> You can use any of the standard URL types, such
          as <literal>http, ftp, file, telnet, mailto</literal> (in
          most cases, however, use of <literal>mailto</literal> is
          unnecessary&mdash;see discussion of
          <sgmltag>&lt;email></sgmltag> tag).
        </para>
      </sect3>

      <sect3 id="filenames">  <title>Filenames, commands, and other
        computer-related things</title>
        <para>
          Here are some tags used to describe operating system-related
          things:  
        </para>
	<itemizedlist>
          <listitem>
            <para>  <sgmltag>&lt;filename></sgmltag> &mdash; used
              for filenames,
              e.g.<sgmltag>&lt;filename></sgmltag>
                    foo.sgml
                  <sgmltag>&lt;/filename></sgmltag> 
              produces: <filename>foo.sgml</filename>.
            </para>
          </listitem>
          <listitem>
            <para>  <sgmltag>&lt;filename
              class="directory"></sgmltag> &mdash; used for
              directories, e.g.<sgmltag>&lt;filename
              class="directory"></sgmltag>/usr/bin
                  <sgmltag>&lt;/filename></sgmltag>
              produces: <filename
              class="directory">/usr/bin</filename>.
            </para>
          </listitem>
          <listitem>
            <para>
              <sgmltag>&lt;application></sgmltag> &mdash; used for
              application names,
              e.g. <sgmltag>&lt;application></sgmltag>Gnumeric
              <sgmltag>&lt;/application></sgmltag> produces:
              <application>Gnumeric</application>.
            </para>
          </listitem>
          <listitem>
            <para>
	      <sgmltag>&lt;envar></sgmltag> &mdash; used for
	      environment variables, e.g. 
              <sgmltag>&lt;envar></sgmltag>PATH<sgmltag>&lt;/envar></sgmltag>. 
            </para>
          </listitem>
  
          <listitem>
            <para>
              <sgmltag>&lt;command></sgmltag> &mdash; used for
              commands entered on command line, e.g.
              <sgmltag>&lt;command></sgmltag>make install
              <sgmltag>&lt;/command></sgmltag> produces:
              <command>make install</command>.
            </para>
          </listitem>
          <listitem>
            <para>
              <sgmltag>&lt;replaceable></sgmltag> &mdash; used for
              replaceable text, e.g.
              <sgmltag>&lt;command></sgmltag>db2html<sgmltag>&lt;replaceable></sgmltag>
              foo.sgml
              <sgmltag>&lt;/replaceable></sgmltag><sgmltag>&lt;/command></sgmltag>
              produces: <command>db2html
              <replaceable>foo.sgml</replaceable></command>.
            </para>
          </listitem>
        </itemizedlist>  
      </sect3>

      <sect3 id="keys">   
        <title>Keyboard input</title> 
        <para> To mark up text input by the user, use
        <sgmltag>&lt;userinput></sgmltag>.
        </para>
        <para>  To mark keystrokes such as shortcuts and other
          commands, use <sgmltag>&lt;keycap></sgmltag>. 
          This is used for marking up what is printed on the top 
          of the physical key on the keyboard. There are a couple of
          other tags for keys, too: <sgmltag>&lt;keysym&gt;</sgmltag>
          and <sgmltag>&lt;keycode&gt;</sgmltag>. However you are
          unlikely to need these for most documentation. For reference,
          <sgmltag>&lt;keysym&gt;</sgmltag> is for the <quote>symbolic
          name</quote> of a key. <sgmltag>&lt;keycode&gt;</sgmltag> is
          for the <quote>scan code</quote> of a key. These are not
          terms commonly required in <acronym>GNOME</acronym> documentation,
          although <sgmltag>&lt;keysym&gt;</sgmltag> is useful for marking
          up control codes.
       </para>
       <para>
          To mark up a combination of keystrokes, use the
          <sgmltag>&lt;keycombo></sgmltag> wrapper:
          <programlisting>
<![CDATA[
<keycombo>
 <keycap>Ctrl</keycap>
 <keycap>Alt</keycap>
 <keycap>F1</keycap>
</keycombo>]]>
          </programlisting>
        </para>
        <para>
          Finally, if you want to show a shortcut for some menu
          command, here are the appropriate tags (rather long):
          <programlisting>
<![CDATA[
<menuchoice>
 <shortcut>
  <keycombo><keycap>Ctrl</keycap><keycap>q</keycap></keycombo>
 </shortcut> 
 <guimenuitem> Quit</guimenuitem> 
</menuchoice>]]>
          </programlisting>
          which produces simply
          <menuchoice>
            <shortcut>   <keysym>Ctrl-q</keysym> </shortcut>
            <guimenuitem> Quit</guimenuitem>
          </menuchoice>
        </para>
      </sect3>

      <sect3 id="email">
        <title>E-mail addresses</title> <para>  To mark up e-mail
        address, use <sgmltag>&lt;email></sgmltag>:
          <programlisting>
<![CDATA[ The easiest way to get in touch with me is by e-mail
(<email>me@mydomain.com</email>)]]>
          </programlisting>
          which produces: The easiest way to get in touch with me is
          by e-mail  (<email>me@mydomain.com</email>) Note that
          <sgmltag>&lt;email></sgmltag> automatically produces a link
          in html version.
        </para>
      </sect3>

      <sect3 id="specsymb">
	<title> Special symbols </title>
	<para> 
	  DocBook also provides special means for entering
	typographic symbols which can not be entered directly
	form the keyboard (such as copyright sign). This is done using
	<emphasis>entities</emphasis>, which is SGML analogue of
	macros, or commands, of LaTeX. They generally have the form 
	  <sgmltag>&amp;entityname;</sgmltag>. Note that the semicolon
	is required. 
	</para>
	<para>
	  here is partial list of most commonly used enitites:
	</para>
	<itemizedlist>
	  <listitem><para>
             <sgmltag>&amp;amp;</sgmltag> &mdash; ampersend (&amp;)
	  </para></listitem>
	  <listitem><para>
             <sgmltag>&amp;lt;</sgmltag> &mdash; left angle bracket (&lt;)
	  </para></listitem>
	  <listitem><para>
             <sgmltag>&amp;copy;</sgmltag> &mdash; copyright sign (&copy;)
	  </para></listitem>
	  <listitem><para>
             <sgmltag>&amp;mdash;</sgmltag> &mdash; long dash (&mdash;)
	  </para></listitem>
	  <listitem><para>
             <sgmltag>&amp;hellip;</sgmltag> &mdash; ellipsis (&hellip;)
	  </para></listitem>
	</itemizedlist>
	<para>
	  Note that the actual look of the resulting symbols depends
	  on the fonts used by your browser; for example, it might
	  happen that long dash (<sgmltag>&amp;mdash;</sgmltag>) looks
	  exactly like the usual dash (-). However, in the PostScript
	  (and thus, in print) the output will look markedly better if
	  you use appropriate tags. 
	</para>
      </sect3>
    </sect2>
  </sect1>
  
<!-- ################# GDP Documentation Conventions ############### -->
 
  <sect1 id="conventions">
    <title>GDP Documentation Conventions </title> 

<!-- ####### GDP Documentation Conventions | All Documentation ####### -->

    <sect2 id="conventionsalldocs">
      <title>Conventions for All GDP Documentation</title>
      <sect3 id="xmlcomp">
	<title> XML compatibility </title>
	<para>
	  All GNOME documentation  should conform to XML syntax
	  requirements, which are stricter than SGML ones &mdash; see
	  <xref linkend="xml" /> for more informaion.
	</para>
      </sect3> 

      <sect3 id="authorsnames"> 
	<title> Authors' names</title>
	<para> 
	  All GNOME documentation should contain the names of both the
	  application authors and documentation authors, as well as a
	  link to the application web page (if it exists) and
	  information for bug submission &mdash; see templates for an
	  example. 
	  </para>
      </sect3>
    </sect2>

<!-- ####### GDP Documentation Conventions | All Documentation ####### -->

    <sect2 id="conventionsappdocs">
      <title>Conventions for Application Documentation</title>

      <sect3 id="applicationversionid">
        <title>Application Version Identification</title>
        <para>
          Application documentation should identify the version of the
          application for which the documentation is written:
          <programlisting>
<![CDATA[
<sect1 id="intro">
 <title>Introduction</title>
 <para>
  blah-blah-blah This document describes version 1.0.53 of gfoo.
 </para>
</sect1>]]>
          </programlisting>
        </para>
      </sect3>
      <sect3 id="license">
	<title> Copyright information </title> 
        <para> Application
        documentation should contain a copyright notice, stating the
        licensing terms. It is suggested that you use the GNU Free
        Documentation License.  You could also use some other license
        allowing free redistribution, such as GPL or Open Content
        license.  If documentation uses some trademarks (such as UNIX,
        Linux, Windows, etc.), proper legal junk should also be
        included (see templates).
	</para>
      </sect3>
      <sect3 id="license2">
       <title>Software license</title>
       <para> 
         All GNOME applications must contain information about the
       license (for software, not for documentation), either in the
       "About" box or in the manual. 
       </para>
      </sect3>

      <sect3 id="bugtraq">
	<title> Bug reporting</title> 	
        <para> 
	  Application documentation should give an address for
        reporting bugs and for submitting comments about the
        documentaion (see templates for an example). 
       </para>
      </sect3>
    </sect2>
  </sect1>
  
<!-- ################# Writing Application Manuals ###############-->
  
  <sect1 id="writingapplicationmanuals">
    <title>Writing Application and Applet Manuals</title>
    <para>
       Every GNOME application or applet should have a manual specific
      to that particular application. This manual should be a complete
      and authoritative guide.  The manual should describe what the
      program does and how to use it.  Manuals will typically describe
      each window or panel presented to the user using screenshots (in
      PNG format only) when appropriate.  They should also describe
      each feature and preference option available.
    </para>
    <note>
      <title>Documentation Availability</title>
      <para>
        Applications and applets should not rely on documentation
        which is only available on the internet.  All manuals and
        other documentation should be packaged with the application or
        applet and be made available to the user through the standard
        GNOME help system methods described below.
      </para>
    </note>
    <para> Application manuals should be based on the template in
    <xref linkend="template1" />.  Applet manuals should be based on
    the templates in <xref linkend="template2-1x" /> for GNOME
    versions 1.x and the templates in <xref linkend="template2-2x" />
    for GNOME versions 2.x.
    </para>
    <note>
      <title>Manuals For Large Applications</title>
      <para>
        Manuals for very large applications, such as GNOME Workshop
        components should be a <sgmltag>&lt;book></sgmltag> (and thus
        use <sgmltag>&lt;chapter></sgmltag> for each primary section)
        , instead of <sgmltag>&lt;article></sgmltag> which most
        applications use(with each primary section being a
        <sgmltag>&lt;sect1></sgmltag>).
      </para>
    </note>
    <note>
      <title>Applet Manuals in GNOME 2.0</title>
      <para>
        Note that applet manuals in GNOME 2.0 are treated in a special
        way.  The manuals for all applets are merged into a single
        virtual document by Nautilus.  For this reason, the header
        information for applet manuals is omitted and the  first
        section of each applet is
        <sgmltag>&lt;sect1></sgmltag>. Applet manuals will typically
        have several sections, each of which is
        <sgmltag>&lt;sect2></sgmltag>.
      </para>
    </note>
    <para>
      Application manuals should be made available by having a
      "Manual" entry in the <guimenu>Help</guimenu> pull-down menu
      at the top of the 
      application, as described in <xref linkend="listingdocsinhelpmenu" />.
      Applets should make their manuals available by
      right-clicking on the applet. 
    </para>
  </sect1>
  

<!-- ############### Listing Documents in the Help Menu ############# -->

  <sect1 id="listingdocsinhelpmenu">
    <title>Listing Documents in the Help Menu</title>

    <note>
      <title>Developer Information</title>
      <para>
        This section is for developers.  Documentation authors
        generally do not need to know this material.
      </para>
    </note>
    <para>
      Typically the application manual and possibly additional help
      documents will be made available to the user under the
      <guimenu>Help</guimenu> menu at the top right of the
      application. To do this, you must first write a
      <filename>topic.dat</filename> file. The format for this file is:
      <programlisting>
One line for each 'topic'.

Two columns, as defined by perl -e 'split(/\s+/,$aline,2)'

First column is the HTML file (and optional section) for the topic,
relative to the app's help file dir.

Second column is the user-visible topic name.
      </programlisting>
      For example, <application>Gnumeric</application>'s
      <filename>topic.dat</filename> file is:
      <programlisting>
gnumeric.html   Gnumeric manual
function-reference.html Gnumeric function reference
      </programlisting>
      When the application is installed, the
      <filename>topic.dat</filename> file should be placed in the
      <filename
      class="directory">$prefix/share/gnome/help/<replaceable>appname</replaceable>/C/</filename> directory
      where <replaceable>appname</replaceable> is replaced by the
      application's name.  The application documentation (converted
      from SGML into HTML with <command>db2html</command>) should be
      placed in this directory too.
    </para>
    <note>
      <para>
       If the help files are not present in the correct directory, the
       menu items will NOT appear when the program is run. 
      </para>
    </note>
    <para>
      The <filename>topic.dat</filename> file is used by the GNOME
      menu building code to generate the <guimenu>Help</guimenu>
      menu. When you define your menu:  
<programlisting>
GnomeUIInfo helpmenu[] = {
              {GNOME_APP_UI_ITEM, 
               N_("About"), N_("Info about this program"),
               about_cb, NULL, NULL, 
               GNOME_APP_PIXMAP_STOCK, GNOME_STOCK_MENU_ABOUT,
               0, 0, NULL},
               GNOMEUIINFO_SEPARATOR,
               GNOMEUIINFO_HELP("<emphasis>appname</emphasis>"),
               GNOMEUIINFO_END
        };
</programlisting>
      the line specifying <varname>GNOMEUIINFO_HELP</varname> causes
      GNOME to create a menu entry which is tied to the documentation
      in the directory mentioned above. Also, all the topics in the
      <filename>topic.dat</filename> file will get menu entries in the
      <guimenu>Help</guimenu> menu. When the user selects any of these
      topics from the <guimenu>Help</guimenu> menu, a help browser
      will be started with the associated HTML documentation.
    </para>
  </sect1>


<!-- ################# Application Help Buttons ############### -->

  <sect1 id="applicationhelpbuttons">
    <title>Application Help Buttons</title>

    <note>
      <title>Developer Information</title>
      <para>
        This section is for developers.  Documentation authors
        generally do not need to know this material.
      </para>
    </note>
    <para>
      Most GNOME applications will have <guibutton>Help</guibutton>
      buttons.  These are most often seen in Preference windows. (All
      Preference windows should have <guibutton>Help</guibutton>
      buttons.) Most <guibutton>Help</guibutton> buttons will connect
      to the application manual, although some may connect to special
      documents.  Because the <guibutton>Help</guibutton> buttons do
      not generally have their own special documentation, the
      documentation author(s) do not need to do very much.  However,
      the application author must be careful to guarantee that the
      application correctly opens the help documentation when the
      <guibutton>Help</guibutton> buttons are pressed.  
    </para>
    <para>
      To make the Help buttons call the correct document in the GNOME Help
      Browser the developer should add code based on the following example:
    </para>
    <programlisting>
gchar *tmp;
tmp = gnome_help_file_find_file ("module", "page.html");
if (tmp) {
  gnome_help_goto(0, tmp);
  g_free(tmp);
}
    </programlisting>
    <note>
      <title>NOTE</title>
      <para>
        The example above is in the C language, please refer to other
        documentation or forums for other GNOME language bindings.
      </para>
    </note>
 </sect1>

<!-- ################# Packaging Applet Documentation ############### -->

  <sect1 id="packagingappletdocs">
    <title>Packaging Applet Documentation</title>
    <sect2 id="appletfiles">
      <title>Applet Documentation Files</title>
      <para>
        In GNOME 2.0 each applet will have its own documentation
        installed separately, and the GNOME 2.0 help
        browser (<application>Nautilus</application>) will dynamically
        merge the applet documents into a single virtual book
        called <citetitle>GNOME Applets</citetitle>. During the
        transitionary stage between GNOME 1.0 and GNOME 2.0, each
        applet in the gnome-applets package has its own manual(stored
        with the applet in CVS), but they are merged together manually
        to create the <citetitle>GNOME Applets</citetitle> book before
        distribution.  Telsa 
        <email>hobbit@aloss.ukuu.org.uk</email> is the maintainer of
        this document.  Applet documentation should be sent to Telsa
        (or placed in CVS) who will make sure they are correctly
        packaged with the applets.  The applet author should be
        contacted to modify the menu items and help buttons to bind to
        the applet documentation if necessary.
      </para>
      <para>
        Images which are part of the applet documentation should be in
        PNG format and should reside in the same directory as the SGML
        document file in CVS(gnome-applets/APPLETNAME/help/C).
      </para>
      <para>
        Applets which are not part of the gnome-applets package must
        package their documentation with the particular applet
        package. They should use the same applet template as other
        applets.  However, the <sgmltag>&lt;xref></sgmltag> links to
        the introductory chapter of the <citetitle>GNOME
        Applets</citetitle>  book must be removed (as the 1.x
        <application>GNOME Help Browser</application> does not allow
        you to create links between separate documents) and replaced
        with suitable text.  Note that since this document is not part
        of the <citetitle>GNOME Applets</citetitle> book, you must
        remember to add <sgmltag>&lt;legalnotice></sgmltag> and
        <sgmltag>&lt;copyright></sgmltag> sections.
      </para>
    </sect2>

    <sect2 id="appletmenu">
      <title>Adding Documentation to an Applet Menu</title>
      <note>
        <title>Developer Information</title>
        <para>
          This section is for developers.  Documentation authors
          generally do not need to know this material.
        </para>
      </note> 
      <para>
        Applets should have <guimenu>About</guimenu> and
        <guimenu>Manual</guimenu> menu items, typically as the first
        and second top-most items in the menu respectively.  This
        section describes how the developer creates these menu items
        and links them to the documentation.
      </para>
      <para>
        To add an applet's manual to its applet menu, use:
<programlisting>
/* add an item to the applet menu */
applet_widget_register_callback(APPLET_WIDGET(applet), "manual",
_("Manual"), &amp;open_manual, NULL);
</programlisting>
        Here the second argument is an arbitrary name for the
        callback, the third argument is the label which will appear
        when the user right clicks on the applet, and the fourth
        argument is the callback function.
      </para>
      <para>
        You will need to write a simple callback function to open the
        help browser to the appropriate document.  This is done using
        the <function>gnome_help_file_find_file</function> function,
        as described in <xref linkend="applicationhelpbuttons" />.
      </para>
      <para>
        You will also want to add an <guimenu>About</guimenu> menu
        item to the applet's menu.  This is a
        stock menu item and is done:
<programlisting>
applet_widget_register_stock_callback (APPLET_WIDGET(applet), "about",
       GNOME_STOCK_MENU_ABOUT, _("About"), &amp;my_applet_cb_about,
       NULL);
</programlisting>
      </para>
      <para>
        More information can be found at <ulink type="http"
        url="http://developer.gnome.org/doc/tutorials/applet/index.html">Writing
        GNOME panel applets using the GTK+/GTK-- widget set</ulink>.
      </para>
    </sect2>
 </sect1>


<!-- ################# Writing Context Sensitive Help ###############
-->

  <sect1 id="writingcontextsensitivehelp">
    <title>Writing Context Sensitive Help (coming in GNOME-2.0)</title>
    <para>
      Context sensitive help, also known as "pop-up" help, will allow
      a user to obtain help information about specific buttons or
      parts of an application.
    </para>
    <para>
      Context sensitive help is still under development and not all
      the details are available at this time. However, the basics can
      be shown here so that you can understand how the system will
      work.
    </para>
    <para>
      The Context Sensitive Help system is designed to allow the
      developer to give an id to a particular portion of the User
      Interface, for example, a button. Once the interface is complete
      a Perl script can then be run against the interface code to
      create a "map" file. This map file allows the developer or
      writer to associate particular paragraph sections from an XML
      document to the interface items.
    </para>
    <para>
      The XML used for the document is a small XML DTD that is being
      developed to use the same tags (albeit, much fewer) as DocBook
      so that writers do not have to re-learn a new DTD.
    </para>
    <para>
      Once the document is written and map file is complete, when the
      user launches context sensitive help on the interface (either by
      pressing a button and then clicking on the interface item they
      want information on, or by right mouse clicking on the interface
      item and selecting a pop-up menu item like "What's This") a
      small transient window will appear with brief but detailed
      information on the interface item.
    </para>
  </sect1>

<!-- ################# Referring to Other GNOME Documentation
############# -->

  <sect1 id="referring">
    <title>Referring to Other GNOME Documentation (coming in
    GNOME-2.0)</title>
    <para>
      In the GNOME 2.0 Help System, you will be able to create links
      from one document to another.  The exact mechanism for doing
      this is in development.
    </para>
  </sect1>
  
  
<!-- ################# Basics of Documentation Style ############### -->

  <sect1 id="basics">
    <title>Basics of Documentation Style</title>
    <para>
       Most people have never enjoyed reading a software manual, and
       they probably never will.  Many times, they'll read the
       documentation only when they run into problems, and they'll be
       frustrated and upset before they even read a word.  On the
       other hand, some readers will read the manual all the way
       through, or at least look at the introduction before they
       start. Your document might serve as a reference for an expert
       or a guide to a beginner, and it must have enough depth to
       satisfy the first without overwhelming the second.  Ideally, it
       will serve beginners as they <emphasis>become</emphasis>
       experts. Remember, your goal is to produce <emphasis>complete,
       intuitive and clear</emphasis> documentation.
    </para>
    <para>
       In order to write useful documentation, you'll have to know who
       your audience is likely to be.  Then, you can look for the
       problems they're likely to run into, and solve them.  It will
       also help if you focus on the tasks users will perform, and
       group features accordingly, rather than simply describing
       features at random.  
    </para>

<!--  *********** Basics of Documentation Style: planning -->

    <sect2 id="styleplanning">
      <title>Planning</title>
      <para>
         Begin documenting by learning how to use the application and
         reading over any existing documentation.  Pay attention to
         places where your document will differ from the template.  It
         may help to develop a document skeleton: a valid XML or SGML
         document that has little or no content.  For very large
         applications, you will need to make significant departures
         from the templates, since you'll be using the
         <sgmltag>&lt;book></sgmltag> tag instead of
         <sgmltag>&lt;chapter></sgmltag> or
         <sgmltag>&lt;article></sgmltag>.
      </para>
    </sect2>


<!-- ####### Basics of Documentation Style | Balance ####### -->
    <sect2 id="balance">
      <title>Achieving a Balanced Style</title>

      <para> 
         Just as you need to juggle expert and novice readers,
         you'll have to juggle a number of other extremes as you write:
         <itemizedlist>
          <listitem>
	    <para>
              Documents should be complete, yet concise.  You should
              describe every feature, but you'll have decide how much
              detail is really necessary.  It's not, for example,
              necessary to describe every button and form field in a
              dialog box, but you should make sure that your readers
              know how to bring up the dialog and what it does.  If
              you spend fewer words on the obvious, you can spend more
              time clarifying the ambiguous labels and explaining
              items that are more complex.
            </para>
          </listitem>
	  <listitem>
	    <para>
              Be engaging and friendly, yet professional. Games
              documents may be less formal than productivity
              application documents (people don't
              <emphasis>use</emphasis> games, they
              <emphasis>play</emphasis> them), but all of them should
              maintain a standard of style which holds the reader's
              interest without resorting to jokes and untranslatable
              allusions or puns.
           </para>
	  </listitem>
	  
   	  <listitem>
	    <para>
              Examples, tips, notes, and screenshots are useful to
              break up long stretches of text, but too many can get in
              the way, and make your documents too choppy to read.
              It's good to provide a screenshot of any dialog windows
              a user might run into, but if a dialog box has several
              tabs, it's not usually necessary to have one for each.
           </para>
	  </listitem>

   	  <listitem>
	    <para>
              The GDP strives to have all of its documentation conform
              to certain standards of style and content, but every
              document (and every writer) is different.  You will need
              to use your judgement, and write documents to fit with
              the rest of the project, without compromising the
              individual needs of your subject, or your own
              individuality as a writer.
           </para>
	  </listitem>

	</itemizedlist>
       </para>
    </sect2>


<!-- ####### Basics of Documentation Style | Structure ####### -->

    <sect2 id="stylestructure">
      <title>Structure</title>
      <para>
         In general, you won't have to worry too much about structure,
         because the templates provide you with an excellent example.
         As a general rule, try to follow that structural example.
         That means using links, hierarchical nesting, and, if
         necessary, a glossary or index.  You probably won't need to
         use every available structural tag, but take advantage of
         what DocBook provides you.
      </para>
      <para>
         As to linking, there's some disagreement about whether to use
         <sgmltag>&lt;xref></sgmltag> <sgmltag>&lt;link></sgmltag>
         when you make links within your documents.  You'll have to
         decide, based on the different ways that they are presented
         in output, which is more appropriate given the context.
         Regardless of which you use, you should not forget to use
         them.  Help your readers find information that relevant to
         the issue at hand.
      </para>
      <para>
         The table of contents will be generated automatically, but
         you will probably have to develop your own index if you wish
         to have one.  The Nautilus Help Browser will have new, and
         currently unknown, indexing capabilities, so index style and
         structure are still under discussion.  The GNOME User's Guide
         will contain a glossary in its next versions; unless you're
         writing a<sgmltag>&lt;book></sgmltag>, it will probably be best to
         contribute to that rather than developing your own.
      </para>
    </sect2>
<!-- ####### Basics of Documentation Style | Grammar & Spelling ####### -->

    <sect2 id="stylegrammar">
      <title>Grammar and Spelling</title>
      <para>
        Nobody expects you to be perfect; they just expect the
        documentation for their software to be error-free.  That means
        that, in the same way that developers look for bugs and accept
        bug reports, writers must check for errors in their documents.
        Poor grammar, bad spelling, and gross technical errors in
        draft documents are fine.  However, if those problems show up
        in a "real" release, they can count against the credibility of
        GNOME and Linux.  They'll also make you look bad.
      </para>
      <para>
        There is no substitute for a human proofreader; use a
        spell-check program, then read it over yourself, and then find
        someone else to help you.  Other GDP members are, of course,
        willing and able to help you, but non-writers are often at
        least as helpful.
      </para>
      <para>
        Proofreading documents is both a also a good way to
        familiarize yourself with documentation, and it certainly
        makes you valuable to the GDP. Help other writers proof their
        documents, and they will help you with yours.
      </para>
    </sect2>
  </sect1>
  
<!-- ################# Teamwork ############### -->

  <sect1 id="teamwork">
    <title>Teamwork</title>  <!-- ####### Teamwork | Working With The
GDP Team ####### -->

    <sect2 id="teamworkgdp">
      <title>Working With The GDP Team</title>
      <para>
        The GDP team is a valuable resource for any documentation
        author.  GDP members can answer most questions documentation
        authors have during the course of their work. It is also
        important to make sure you are not duplicating work of other
        GDP members by visiting the <citetitle>GDP Documentation
        Status Table</citetitle> (<ulink
        url="http://www.gnome.org/gdp/doctable/"
        type="http">http://www.gnome.org/gdp/doctable/</ulink>) and
        assigning a documentation item to yourself.  This table also
        provides a forum for making suggestions and announcements for
        each documentation item.  The best way to get in touch with
        GDP members is on the #docs IRC channel at irc.gnome.org or
        else by emailing the <ulink type="http"
        url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
        <citetitle>gnome-doc-list mailing list</citetitle></ulink>.
      </para>
      <para>
        After an author has finished a document (or even a draft
        version of the document), it is a good idea to ask a member of
        the GDP team to read the document, checking it for grammar,
        proper DocBook markup, and clarity.  One may typically find
        another author to do this by either asking on the #docs IRC
        channel at irc.gnome.org or by emailing the <ulink type="http"
        url="http://mail.gnome.org/mailman/listinfo/gnome-doc-list/">
        <citetitle>gnome-doc-list mailing list</citetitle></ulink>.
      </para>
    </sect2>

<!-- ####### Teamwork | Working With Developers ####### -->

    <sect2 id="teamworkdevelopers">
      <title>Working With Developers</title>
      <para>
        Writing documentation typically involves a certain amount of
        interaction with the developers of GNOME or the application
        which is being documented.  Often a document author will need
        to ask the developer technical questions during the course of
        writing a document. After the document is finished, it is good
        idea to ask the developer to read the document to make sure it
        is technically correct.  The documentation author should also
        make sure that the application author correctly binds and
        packages the documentation with the application.
      </para>
    </sect2>

<!-- ####### Teamwork | Working With Users #######

    <sect2 id="teamworkusers">
      <title>Working With Users</title>
      <para>
        Some document authors may wish to get feedback on their
        documents directly from users.  This may be done by ...
      </para>
    </sect2>-->
  </sect1>
  
<!-- ################# Finishing a Document ############### -->

  <sect1 id="finishing">
    <title>Finishing A Document</title>

<!-- ####### Finishing a Document | Editting the Document ####### -->

    <sect2 id="editting">
      <title>Editing The Document</title>
      <para>
        When the document is finished, the document should be edited
        by another member of the GDP for spelling, clarity, and
        DocBook markup. It should also be read by an application
        author to make sure the document is technically accurate.
      </para>
    </sect2>

<!-- ####### Finishing a Document | Submitting the Document ####### -->

    <sect2 id="submitting">
      <title>Submitting The Document</title>
      <para>
        After the document has been edited and checked for technical
        accuracy, it is ready to be combined with the application or
        documentation package.  This is typically done by passing the
        document to the application or package developer.  In some
        cases, the documents can be committed directly into CVS,
        however this should only be done after obtaining permission to
        make CVS commits from the developer.  Note that in many cases,
        the application may need to be modified to correctly link to
        the documentation.  The packaging system (tarballs and binary
        packages) may also need to be modified to include the
        documentation in the package.  Generally, this should be done
        by the developers.
      </para>
      <para>
        The final step is to email the GNOME Translation Team at
        <email>gnome-i18n@nuclecu.unam.mx</email> to notify them that
        there is a new document for them to translate.
      </para>
    </sect2>
  </sect1>
  
<!-- ################# Resources ############### -->

  <sect1 id="resources">
    <title>Resources</title> 
<!-- ####### Resources | Resources on the Web ####### -->

    <sect2 id="resourcesweb">
      <title>Resources On The Web</title> <para>  The <ulink
      type="http" url="http://developer.gnome.org/projects/gdp/">GNOME
      Documentation Project Web page</ulink> lists current GDP 
      projects and members.
      </para>
      <para>
        The <ulink url="http://www.gnome.org/gdp/doctable/"
        type="http">GDP Documentation Status Table</ulink> tracks the
        status of all the various documentation components of GNOME.
      </para>
      <para>
        Norman Walsh's  <ulink url="http://www.docbook.org"
        type="http"> <citetitle>DocBook: The Definitive
        Guide</citetitle></ulink> in an excellent book on DocBook,
        available both online and in print.
      </para>
    </sect2>

<!-- ####### Resources | Books ####### -->

    <sect2 id="resourcesbooks">
      <title>Books</title>
      <para>
        Docbook: The Definitive Guide is available in both printed
        form and on the web at:
        <ulink url="http://www.docbook.org/tdg/index.html">
        <citetitle>Docbook: The Definitive Guide</citetitle>
        </ulink>
      </para>
    </sect2>

<!-- ####### Resources | Mailing Lists ####### -->

    <sect2 id="mailinglists">
      <title>Mailing Lists</title>
      <para>
        The <emphasis>gnome-docs-list</emphasis> mailing list is the
        main discussion area for all contributors to the GNOME
        Documentation Project. You can find out how to subscribe to
        this list on <ulink
        url="http://www.gnome.org/resources/mailing-lists.html"
        type="http">GNOME Mailing Lists</ulink>.  This is a rather
        low-volume list, so you will not be flooded with messages.
      </para>
    </sect2>

<!-- ####### Resources | IRC ####### -->

    <sect2 id="irc">
      <title>IRC</title>
      <para>
        Internet Relay Chat (IRC) is a fast and easy way to get in
        touch with other GDP members.  There are generally at least a
        few members here who can answer questions or discuss
        documentation issues.  The IRC channel is #docs at
        irc.gnome.org.
      </para>
    </sect2>
  </sect1>
  
<!-- ################# Example Docs ###############

  <appendix id="exampledocs">
    <title>Example Docs</title> 

####### Example Docs | Example 1: Application Manual ####### 

    <sect1 id="ex1">
      <title>Example 1: Application Manual</title>
      <programlisting>
<![CDATA[ (Put sgml here.)]]> </programlisting>
    </sect1>

####### Example Docs | Example 2: Applet Manual ####### 

    <sect1 id="ex2">
      <title>Example 2: Applet Manual</title>
      <programlisting>
<![CDATA[(Put sgml here.)]]> </programlisting>
    </sect1>

##### Example Docs | Example 3: Application Context Sensitive Help ####

    <sect1 id="ex3">
      <title>Example 3: Application Context Sensitive Help</title>
      <programlisting>
<![CDATA[(Put sgml here.)]]> </programlisting>
    </sect1>

####### Example Docs | Example 4: Complete Application: gnome-hello  #######

    <sect1 id="ex4">
      <title>Example 4: Complete Application: gnome-hello</title>
      <programlisting>
<![CDATA[(Put sgml here.)]]> </programlisting>
    </sect1>

####### Example Docs | Example 5: Tutorial #######

    <sect1 id="ex5">
      <title>Example 5: Tutorial</title>
      <programlisting>
<![CDATA[(Put sgml here.)]]> </programlisting>
    </sect1>
  </appendix>-->
  
<!-- ################# Document Templates ############### -->

  <appendix id="templates">
    <title>Document Templates</title> 
<!-- ####### Document Templates | Templates 1: Application Manual ####### -->

    <sect1 id="template1">
      <title>Template 1: Application Manual</title>
      <para>
        The following template should be used for all application
        manuals.  You can always get the latest copy of this
        template from  <ulink type="http"
        url="http://developer.gnome.org/projects/gdp/templates.html">GDP
        Documentation Templates</ulink>.
        <programlisting>

<![CDATA[
<!DOCTYPE Article PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[
        <!-- if not using PNG graphic, replace reference above with
             .....PUBLIC "-//OASIS//DTD DocBook V3.1//EN"[
         -->
<!ENTITY version "1.0.53">
        <!-- replace version above with actual application version number-->
	<!--  Template Version: 1.0.1  (do not remove this line) -->
]>


<!-- This is a GNOME documentation template, designed by the GNOME
  Documentation Project Team. Please use it for writing GNOME
  documentation, making obvious changes. In particular, all the words
  written in UPPERCASE (with the exception of GNOME) should be
  replaced. As for "legalnotice", please leave the reference
  unchanged.

  Remember that this is a guide, rather than a perfect model to follow
  slavishly. Make your manual logical and readable.  And don't forget
  to remove these comments in your final documentation!  ;-)
  -->

<!-- =============Document Header ============================= -->

<article id="index"> <!-- please do not change the id -->

  <artheader>
    <title>MY-GNOME-APP</title>
    <copyright>
      <year>2000</year>
      <holder>ME-THE-AUTHOR</holder>
    </copyright>

  <!-- translators: uncomment this:

  <copyright>
   <year>2000</year>
   <holder>ME-THE-TRANSLATOR (Latin translation)</holder>
  </copyright>

   -->

  <!-- do not put authorname in the header except in copyright - use
  section "authors" below -->

    <legalnotice>
      <para>
        Permission is granted to copy, distribute and/or modify this
        document under the terms of the <citetitle>GNU Free
        Documentation License</citetitle>, Version 1.1 or any later
        version published by the Free Software Foundation with no
        Invariant Sections, no Front-Cover Texts, and no Back-Cover
        Texts. You may obtain a copy of the <citetitle>GNU Free
        Documentation License</citetitle> from the Free Software
        Foundation by visiting <ulink type="http"
        url="http://www.fsf.org">their Web site</ulink> or by writing
        to: Free Software Foundation, Inc., 59 Temple Place - Suite
        330, Boston, MA 02111-1307, USA.
      </para>
      <para>
        Many of the names used by companies to distinguish their
        products and services are claimed as trademarks. Where those
        names appear in any GNOME documentation, and those trademarks
        are made aware to the members of the GNOME Documentation
        Project, the names have been printed in caps or initial caps.
      </para>
    </legalnotice>

  <!-- this is the version of manual, not application --> 
    <releaseinfo>
       This is version 1.0 of MY-GNOME-APP manual.
    </releaseinfo>

  </artheader>

 <!-- ============= Document Body ============================= -->

 <!-- ============= Introduction ============================== -->
  <sect1 id="intro">
    <title>Introduction</title>

    <para>
     <application>MY-GNOME-APP</application> is an application which
     proves mathematical theorems.  It has all the basic features
     expected from a mathematical theorem prover, as well as a number
     of advanced ones, such as proof by confusion.  In fact, many of
     the proofs produced by <application>MY-GNOME-APP</application>
     are so complex that they are capable of proving almost anything
     with a virtually null likelihood of being disproven.  It also has
     the very popular predecessor of proof by confusion, proof by
     dialog, first implemented by Plato.
    </para>
    <para>
      It also allows you to save and print theorem proofs and to add
      comments to the proofs it produces.
    </para>

    <para>
      To run <application>MY-GNOME-APP</application>, select
      <menuchoice>
	<guisubmenu>SUBMENU</guisubmenu>
	<guimenuitem>MY-GNOME-APP</guimenuitem>
      </menuchoice>
      from the <guimenu>Main Menu</guimenu>, or type
      <command>MYGNOMEAPP</command> on the command line.
  </para>

    <para>
      <application>MY-GNOME-APP</application> is included in the
      <filename>GNOME-PACKAGE</filename> package, which is part of the
      GNOME desktop environment. This document describes version
      &version; of <application>MY-GNOME-APP</application>.
    </para>
  </sect1>


 <!-- ================ Usage ================================ -->
 <!-- This section should describe basic usage of the application. -->

  <sect1 id="usage">
    <title>Using MY-GNOME-APP</title>
    <para>
      <application>MY-GNOME-APP</application> can be used to produce a
      perfect proof of <emphasis>any</emphasis> mathematical theorem
      (provided, of course, that this theorem is correct), thus
      providing for new users an easy-to-use graphical interface to
      modern mathematics. This section describes basic usage of
      <application>MY-GNOME-APP</application>.
    </para>

    <!-- ========= Basic Usage =========================== -->
    <sect2 id="mainwin">
      <title>Basic usage</title>
      <para>
        Starting <application>MY-GNOME-APP</application> opens the
        <interface>Main window</interface>, shown in <xref
        linkend="mainwindow-fig">. The window is at first empty.

        <!-- ==== Figure ==== -->
        <figure id="mainwindow-fig">
	  <title>MY-GNOME-APP Main Window</title>
	  <screenshot>
	    <screeninfo>MY-GNOME-APP Main Window</screeninfo>
	    <graphic fileref="SCREENSHOT" format="png" srccredit="ME">
            </graphic>
	  </screenshot>
	</figure>
    <!-- ==== End of Figure ==== -->
      </para> 


 <!-- For this app, one could put "proving" or "edit" (probably even
      both of them) as sect2's separate from the main window
      section. Since they were both so closely involved with the main
      window, I decided to have them as sect3's instead. Judgement
      call. -->

      <sect3 id="proving">
	<title>Proving a Theorem</title>
	<para>
          To get a proof of a theorem, select
          <menuchoice>
	    <guisubmenu>File</guisubmenu>
	    <guimenuitem>New</guimenuitem>
	  </menuchoice>,
            which will
	    bring up the <interface>New Proof</interface> dialog box.
	    Enter the statement of the theorem in the
	    <guilabel>Theorem statement</guilabel> field, select your
	    desired proof type from the drop-down menu, and press
	    <guibutton>Prove!</guibutton>.
        </para>
	<para>
          If <application>MY-GNOME-APP</application> cannot prove the
          theorem by the method you have chosen, or if you have not
          selected a proof type at all,
          <application>MY-GNOME-APP</application> will attempt to
          choose the one that it thinks is most conclusive.  In order,
          it will attempt to prove the theorem with the following techniques: 
     
                <variablelist>
	    <varlistentry>
	      <term>Deduction</term>
	      <listitem>
		<para>
                  This is a proof method that is generally accepted
                  for full credit by Logic professors.
                </para>
	      </listitem>
	    </varlistentry>
	    <varlistentry>
            <term>Induction</term>
	    <listitem>
	      <para>
                This logical style will also earn you full credit on
                your homework.
             </para>
	    </listitem>
            </varlistentry>
	    <varlistentry>
	      <term>Dialog</term>
	      <listitem>
	      <para>
                This logical method is best for Philosophy classes,
                and will probably only merit partial credit on Logic
                or Mathematics homework.
              </para>
	    </listitem>
            </varlistentry>
            <varlistentry>
	      <term>Confusion</term>
	      <listitem>
	      <para>
                Suitable only for political debates, battles of wits
                against the unarmed, and Philosophy classes focusing
                on the works of Kant. Use with caution.
              </para>
	      </listitem>
	    </varlistentry>
	  </variablelist>
          </para>

   <!-- You might want to include a note, warning, or tip, e.g. -->
	
	<warning>
	  <title>Proving Incorrect Theorms</title>
	  <para>
            <application>MY-GNOME-APP</application> cannot prove
            incorrect theorems. If the theorem you have entered is not
            demonstrably true, you will get a message to that effect
            in the main window.  To disprove a theorem, ask
            <application>MY-GNOME-APP</application> to prove its
            logical inverse.
          </para>
	</warning>
      </sect3>
      <sect3 id="editing">
	<title>Editing Proofs</title>
	<para>
          Once you have proven the theorem, it will be displayed in
          the <interface>main window</interface>.  There, you can read
          it over, choose text styles for different portions of it,
          and make comments on it. This section will guide you through
          that process.
        </para>
	<para>
          To alter text styles, first select the statement you wish to
          change by clicking on it once.  You can select several
          statements by Then, choose the style you want to apply from
          the <guisubmenu>Style</guisubmenu> submenu of the
          <guimenu>Edit</guimenu> menu.
          <application>MY-GNOME-APP</application> will convert the
          text to that style.
        </para>
        <para>
          You can also enter comments on a statement by selecting that
          statement, and then beginning to type.  Comments will appear
          after the statement you have selected.
        </para>

	<note>
	  <title>Altering The Proofs Themselves</title>
          <para>
            <application>MY-GNOME-APP</application> does not allow you
            to alter a proof it has produced itself.  You can, save
            your proof as a plain text file (using the
            <guimenuitem>Save as...</guimenuitem> menu), and alter it
            that way.  Be aware, however, that
            <application>MY-GNOME-APP</application> uses its own file
            format for saved proofs, and cannot re-open a file unless
            it is in the .mga format.
          </para>
	</note>
      </sect3>


  <!-- If there are other functions performed from the main window,
       they belong here.   -->

    </sect2>
 
    <!-- ========================================================= 
      Additional Sect2's should describe additional windows, such as
      larger dialog boxes, or functionality that differs significantly
      from the most immediate functions of the application. Make the
      structure logical.
      =============================================================  -->


    <sect2 id="toolbar">
      <title>Toolbar</title>
      <para>
        The toolbar (shown in <xref linkend="figure-usage-toolbar">)
        provides access to several commonly used routines.
        <figure id="figure-usage-toolbar">
	  <title>MY-GNOME-APP Toolbar</title>
	  <screenshot>
	    <screeninfo>MY-GNOME-APP Toolbar</screeninfo>
	    <graphic fileref="usage-toolbar.png" format="png"></graphic>
	  </screenshot>
	</figure>
        <variablelist>
	  <varlistentry>
	    <term>New</term>
	    <listitem>
	      <para>
                Brings up the <interface>New Theorem</interface>
                dialog.
              </para>
	    </listitem>
	  </varlistentry>
	  <varlistentry>
	    <term>Open</term>
	    <listitem>
	      <para>
                 Open an exisiting theorem you want to prove, or a
                 completed proof you wish to print or format.
               </para>
	    </listitem>
	  </varlistentry>
	  <varlistentry>
	    <term>Save</term>
	    <listitem>
	      <para>
	         Save the current theorem permanently in a
	         file.
               </para>
	    </listitem> 
	  </varlistentry>
	</variablelist>
       </para>
    </sect2>
    <!-- ========= Menus =========================== --> 

    <sect2 id="menubar">

       <!-- Describing the menubar ensures comprehensive feature
       coverage. Nest itemizedlists inside variablelists so that each
       menu is easily located by indexing software. Proper indentation
       makes it easier! -->

      <title>Menus</title>
      <para>
	The menu bar, located at the top of the <interface>Main
	Window</interface>, contains the following menus:
       </para>
      <variablelist>
	<varlistentry>
	  <term><guimenu>File</guimenu></term>
	  <listitem>
	    <para>
	       This menu contains:
	       <itemizedlist>
		<listitem>
		  <para>
	            <menuchoice>
		      <shortcut>
			<keycap>F3</keycap>
		      </shortcut>
		      <guimenuitem>Open</guimenuitem>
		     </menuchoice>
	             &mdash; This opens a file which is saved on your computer.
	           </para>
		</listitem>
		<listitem>
		  <para>
	             <menuchoice>
		      <shortcut>
			<keycombo><keycap>Ctrl</keycap><keycap>S</keycap></keycombo>
		      </shortcut>
		      <guimenuitem>Save</guimenuitem>
		    </menuchoice>
	            &mdash; This saves your file.
	          </para>
		</listitem>
		<listitem>
		  <para>
	             <menuchoice>
		      <shortcut>
			<keycombo><keycap>Ctrl</keycap><keycap>W</keycap></keycombo>
		      </shortcut>
		      <guimenuitem>Close</guimenuitem>
		    </menuchoice>
	            &mdash; This closes your file.
	          </para>
		</listitem>
		<listitem>
		  <para>
	            <menuchoice>
		      <shortcut>
			<keycombo><keycap>Ctrl</keycap><keycap>Q</keycap></keycombo>
		      </shortcut>
		      <guimenuitem>Exit</guimenuitem>
		    </menuchoice>
	            &mdash; This quits the application.
	          </para>
		</listitem>
	      </itemizedlist>
	  </para>
	  </listitem>
	</varlistentry>
	
	<varlistentry>
	  <term><guimenu>Edit</guimenu></term>
	  <listitem>
	    <para>
	   This menu contains:
	   <itemizedlist>
		<listitem>
		  <para>
	            <menuchoice>
		      <shortcut>
			<keycombo><keycap>Ctrl</keycap><keycap>X</keycap></keycombo>
		      </shortcut>
		      <guimenuitem>Cut</guimenuitem>
		    </menuchoice>
	            &mdash; This removes any text or data which is selected and
	            places it in the buffer.
	          </para>
		</listitem>
		<listitem>
		  <para>
	            <menuchoice>
		      <shortcut>
			<keycombo><keycap>Ctrl</keycap><keycap>C</keycap></keycombo>
		      </shortcut>
		      <guimenuitem>Copy</guimenuitem>
		    </menuchoice>
	            &mdash; This copies any text or data which is selected into
	            the buffer.
	          </para>
		</listitem>
		<listitem>
		  <para>
	           <menuchoice>
		      <shortcut>
			<keycombo><keycap>Ctrl</keycap><keycap>V</keycap></keycombo>
		      </shortcut>
		      <guimenuitem>Paste</guimenuitem>
		    </menuchoice>
	            &mdash; This pastes any text or data which is copied into
	            the buffer.
	        </para>
		</listitem>
		<listitem>
		  <para>
	             <guimenuitem>COMMAND1&hellip;</guimenuitem>
	             &mdash; This opens the <interface>COMMAND1</interface>
	             dialog, which is used to ....
	          </para>
		</listitem>
		<listitem>
		  <para>
	            <guimenuitem>COMMAND2</guimenuitem>
	            &mdash; This ....
	          </para>
		</listitem>
	      </itemizedlist>
	    </para>
	  </listitem>
	</varlistentry>
	

	<varlistentry>
	  <term><guimenu>Settings</guimenu></term>
	  <listitem>
	    <para>
	   This menu contains:
	   <itemizedlist>
		<listitem>
		  <para>
	      <guimenuitem>Preferences&hellip;</guimenuitem>
	       &mdash; This opens the <link
	       linkend="prefs"><interface>Preferences
	       Dialog</interface></link>, which allows you to configure
	       many settings.
	     </para>
		</listitem>
		<listitem>
		  <para>
	            <guimenuitem>COMMAND3</guimenuitem> &mdash;
    	            This command does something.
    	    	   </para>
		</listitem>
	      </itemizedlist>
	    </para>
	  </listitem>
	</varlistentry>
	
	<varlistentry>
	  <term><guimenu>Help</guimenu></term>
	  <listitem>
	    <para>
	      This menu contains:
	       <itemizedlist>
		<listitem>
		  <para>
	             <guimenuitem>Manual</guimenuitem> &mdash; This
    	              opens the <application>GNOME Help
    	              Browser</application> and displays this manual.
	          </para>
		</listitem>
		
		<listitem>
		  <para>
	            <guimenuitem>About</guimenuitem> &mdash; This
    	            opens the <interface>About</interface> dialog
    	            which shows basic information about
    	            <application>MY-GNOME-APP</application>, such as
    	            the author's name, the application version number,
    	            and the URL for the application's Web page if one
    	            exists.
	          </para>
		</listitem>
	      </itemizedlist>
            </para>
	  </listitem>
	</varlistentry>
      </variablelist>
    </sect2>
  </sect1>



 <!-- ============= Customization ============================= -->

 <sect1 id="prefs">
  <title>Customization</title>
  <para>
   To change the application settings, select
   <menuchoice>
    <guimenu>Settings</guimenu>
    <guimenuitem>Preferences...</guimenuitem>
   </menuchoice>.  This opens the
   <interface>Preferences</interface> dialog, shown in <xref
   linkend="preferences-fig">.
  </para>

  <figure id="preferences-fig">
   <title>Preferences Dialog</title>
   <screenshot>
    <screeninfo>Preferences Dialog</screeninfo>
    <graphic fileref="SCREENSHOT" format="png"
     srccredit="ME">
    </graphic>
   </screenshot>
  </figure>

  <para>
   The properties in the <guilabel>PREFSTABNAME</guilabel> tab are:
   
   <!--many people use itemizedlists in cases like this. Variablelists
   are more appropriate -->

      <variablelist>
	<varlistentry>
	  <term> <guilabel>Default Text Style</guilabel></term>
	  <listitem>
	    <para>
              Select the default text style for statements in your
              proof.  You can still change the style for individual
              proofs or sections of a proof at a later date.
            </para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>(Configuration Item Label)</term>
	  <listitem>
	    <para>
             (Description of Configuration)
             </para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>(Configuration Item Label)</term>
	  <listitem>
	    <para>
             (Description of Configuration)
             </para>
	  </listitem>
	</varlistentry>
      </variablelist>
    </para>

    <para>
     The properties in the <guilabel>SECONDTABNAME</guilabel> tab are:
       <variablelist>
	<varlistentry>
	  <term>(Configuration Item Label)</term>
	  <listitem>
	    <para>
             (Description of Configuration)
             </para>
	  </listitem>
	</varlistentry>
	<varlistentry>
	  <term>(Configuration Item Label)</term>
	  <listitem>
	    <para>
             (Description of Configuration)
             </para>
	  </listitem>
	</varlistentry>
      </variablelist>
    </para>

  <para>
    After you have made all the changes you want, click on
    <guibutton>OK</guibutton> to apply the changes and close the
    <interface>Properties</interface> dialog. To cancel the changes
    and return to previous values, click the
    <guibutton>Close</guibutton> button.
  </para>

 </sect1>


 <!-- ============= Various Sections ============================= -->

 <!-- Here you should add, if necessary, several more sect1's,
 describing other windows (besides the main one), file formats,
 preferences dialogs,  etc. as appropriate. Try not to make any of
 these sections too long. -->


 <!-- ============= Bugs ================================== -->
 <!-- This section should describe known bugs and limitations of
      the program if there are any - please be frank and list all
      problems you know of. -->
 <sect1 id="bugs">
  <title>Known Bugs and Limitations</title>
  <para>
   This application has no known bugs.
  </para>
 </sect1>


<!-- ============= Authors ================================ -->

 <sect1 id="authors">
  <title>Authors</title>
  <para>
   <application>MY-GNOME-APP</application> was written by GNOME-HACKER
   (<email>hacker@gnome.org</email>). To find more information about
   <application>MY-GNOME-APP</application>, please visit the <ulink
   url="http://www.my-gnome-app.org" type="http">MY-GNOME-APP Web
   page</ulink>.  Please send all comments, suggestions, and bug
   reports to the <ulink url="http://bugs.gnome.org" type="http">GNOME
   bug tracking database</ulink>. (Instructions for submitting bug
   reports can be found <ulink
   url="http://bugs.gnome.org/Reporting.html" type="http">
   on-line</ulink>.)  You can also use <application>Bug Report
   Tool</application> (<command>bug-buddy</command>), available in the
   <guisubmenu>Utilities</guisubmenu> submenu of <guimenu>Main
   Menu</guimenu>, for submitting bug reports.
  </para>

  <para>
   This manual was written by ME
   (<email>MYNAME@MYADDRESS</email>). Please send all comments and
   suggestions regarding this manual to the <ulink type="http"
   url="http://developer.gnome.org/projects/gdp">GNOME Documentation 
   Project</ulink> by sending an email to 
   <email>docs@gnome.org</email>. You can also add your comments online 
   by using the <ulink type="http" 
   url="http://www.gnome.org/gdp/doctable/">GNOME Documentation Status
   Table</ulink>.
  </para>

  <!-- For translations: uncomment this:

  <para>
   Latin translation was done by ME
   (<email>MYNAME@MYADDRESS</email>). Please send all  comments  and
   suggestions regarding this translation to SOMEWHERE.
  </para>

  -->

 </sect1>


 <!-- ============= Application License ============================= -->

 <sect1 id="license">
  <title>License</title>
  <para>
   This program is free software; you can redistribute it and/or
   modify it under the terms of the <citetitle>GNU General Public
   License</citetitle> as published by the Free Software Foundation;
   either version 2 of the License, or (at your option) any later
   version.
  </para>
  <para>
   This program is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   <citetitle>GNU General Public License</citetitle> for more details.
  </para>
  <para>
   A copy of the <citetitle>GNU General Public License</citetitle> is
   included as an appendix to the <citetitle>GNOME Users
   Guide</citetitle>.  You may also obtain a copy of the
   <citetitle>GNU General Public License</citetitle> from the Free
   Software Foundation by visiting <ulink type="http"
   url="http://www.fsf.org">their Web site</ulink> or by writing to
   <address>
    Free Software Foundation, Inc.
    <street>59 Temple Place</street> - Suite 330
    <city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>
    <country>USA</country>
   </address>
  </para>
 </sect1>
</article>









]]>


</programlisting>
      </para>
    </sect1>

<!-- ####### Document Templates | Templates 2-1.x: Applet Manual ####### -->

    <sect1 id="template2-1x">
      <title>Template 2: Applet Manual For GNOME 1.x</title>
      <para>
        The following templates should be used for all applet
        manuals in GNOME 1.x releases.  You can always get the latest
        copy of these templates from  <ulink type="http"
        url="http://developer.gnome.org/projects/gdp/templates.html">GDP
        Documentation Templates</ulink>.  Note that the template
        consists of two files; the first file calls the second as an
        entity. You should name the first file
        <filename><replaceable>appletname</replaceable>-applet.sgml</filename>
        and the second file should be named
        <filename><replaceable>appletname</replaceable>.sgml</filename>,
        where
        <filename><replaceable>appletname</replaceable></filename> is
        the name of the applet.
        <programlisting>

<![CDATA[
<!DOCTYPE Article PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[
 <!entity APPLETNAME.sgml SYSTEM "applet_template_1.sgml">
        <!--  Template Version: 1.0.1  (do not remove this line) -->
]>

<!-- This is a GNOME documentation template, designed by the GNOME
  Documentation Project Team. Please use it for writing GNOME
  documentation, making obvious changes. In particular, all the words
  written in UPPERCASE (with the exception of GNOME) should be
  replaced. As for "legalnotice", please leave the reference
  unchanged,make sure to add/remove trademarks to the list as
  appropriate for your document.

  Please don't forget to remove these comments in your final documentation,
  thanks ;-).
-->

<article id="index"> <!-- please do not change the id -->

 <!-- ============= Document Header ============================= -->
 <artheader> 
  <title>APPLETNAME Applet</title>
  <copyright>
   <year>2000</year>
   <holder>YOURFULLNAME</holder>
  </copyright>

  <!-- translators: uncomment this:

  <copyright>
   <year>2000</year>
   <holder>ME-THE-TRANSLATOR (Latin translation)</holder>
  </copyright>

   -->

  <!-- do not put authorname in the header except in copyright - use
  section "authors" below -->

  <legalnotice>
   <para>
    Permission is granted to copy, distribute and/or modify this
    document under the terms of the <citetitle>GNU Free Documentation
    License</citetitle>, Version 1.1 or any later version published
    by the Free Software Foundation with no Invariant Sections, no
    Front-Cover Texts, and no Back-Cover Texts. You may obtain a copy
    of the <citetitle>GNU Free Documentation License</citetitle> from
    the Free Software Foundation by visiting <ulink type="http"
    url="http://www.fsf.org">their Web site</ulink> or by writing to:
    Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.
   </para>
   <para>
    Many of the names used by companies to distinguish their products and
    services are claimed as trademarks. Where those names appear in any
    GNOME documentation, and those trademarks are made aware to the members
    of the GNOME Documentation Project, the names have been printed in caps
    or initial caps.
   </para>
  </legalnotice>

  <releaseinfo>
   This is version XXX of the APPLETNAME applet manual.
  </releaseinfo>
 </artheader>

 <!-- ============= Document Body ============================= -->

 &APPLETNAME.sgml;

</article>


]]>


</programlisting>
        <programlisting>
<![CDATA[
        <!--  Template Version: 1.0.1  (do not remove this line) -->

 <sect1 id="APPLET">
  <title>APPLET Applet</title>

  <para>
   <application>APPLET</application> applet, shown in <xref
   linkend="APPLETapplet-fig">, allows you to &hellip;.  To add this
   applet to a <interface>Panel</interface>, 
   right-click on the <interface>Panel</interface> and choose
   <menuchoice>
    <guimenu>Panel</guimenu>
    <guisubmenu>Add to panel</guisubmenu>
    <guisubmenu>Applet</guisubmenu>
    <guisubmenu>SECTION</guisubmenu>
    <guimenuitem>APPLET</guimenuitem>
   </menuchoice>.
  </para>

  <figure id="APPLETapplet-fig">
   <title>APPLET Applet</title>
   <screenshot>
    <screeninfo>APPLET Applet</screeninfo>
    <graphic format="png" fileref="APPLET_applet" 
    srccredit="YOURNAME">
    </graphic>
   </screenshot>
  </figure>

  <!-- ============= Usage  ================================ -->
  <sect2 id="APPLET-usage">
   <title>Usage</title>
   <para>
    (Place a short description of how to use the applet here.)
   </para>

   <para>
    Right-clicking on the applet brings up a menu containing the
    following items:
    <itemizedlist>

     <listitem>
      <para>
       <guimenuitem>Properties&hellip;</guimenuitem> &mdash;
       opens the <link linkend="APPLET-prefs">
       <guilabel>Properties</guilabel></link> dialog.
      </para>
     </listitem>

     <listitem>
      <para>
       <guimenuitem>Help</guimenuitem> &mdash;
       displays this document.
      </para>
     </listitem>

     <listitem>
      <para>
       <guimenuitem>About&hellip;</guimenuitem> &mdash;
       shows basic information about <application>APPLET
       Applet</application>, including the applet's version and the
       author's name.
      </para>
     </listitem>

    </itemizedlist>
   </para>
  </sect2>


  <!-- ============= Customization ============================= -->
  <sect2 id="APPLET-prefs">
    <title>Customization</title>
    <para>
      You can customize <application>APPLET</application>
      applet by right-clicking on it and choosing
      <guimenuitem>Properties&hellip;</guimenuitem>. This will open the
      <interface>Properties</interface> dialog(shown in <xref
      linkend="APPLET-settings-fig">), which allows you to
      change various settings.
    </para>

    <figure id="APPLET-settings-fig">
     <title>Properties dialog</title>
     <screenshot>
      <screeninfo>Properties dialog</screeninfo>
      <graphic format="png" fileref="APPLET_settings"
      srccredit="YOURNAME">
      </graphic>
     </screenshot>
    </figure>

    <para>
     The properties are:
     <itemizedlist>

      <listitem>
       <para>
        (Configuration Item Label) &mdash; If this button is
        checked&hellip;(description)
       </para>
      </listitem>

      <listitem>
       <para>
        (Configuration Item Label) &mdash; Selecting this
        button&hellip;(description)
       </para>
      </listitem>

      <listitem>
       <para>
        (Configuration Item Label) &mdash; Enter the name of
        &hellip;(description)
       </para>
      </listitem>
     </itemizedlist>
    </para>

    <para> 
      After you have made all the changes you want, click on
      <guibutton>OK</guibutton> to apply the changes and close the
      <interface>Properties</interface> dialog. To cancel the changes
      and return to previous values, click the
      <guibutton>Close</guibutton> button.
    </para>
  </sect2>


  <!-- ============= Bugs ================================== -->
  <!-- This section should describe known bugs and limitations of
       the program if there are any - please be frank and list all
       problems you know of -->
  <sect2 id="bugs">
   <title>Known Bugs and Limitations</title>
   <para>
    This applet has no known bugs.
   </para>
  </sect2>


  <!-- ============= Authors ================================ -->

  <sect2 id="authors">
   <title>Authors</title>
   <para>
    <application>APPLET</application> was written by GNOME-HACKER
    (<email>hacker@gnome.org</email>).  Please send all comments,
    suggestions, and bug 
    reports to the <ulink url="http://bugs.gnome.org" type="http">GNOME
    bug tracking database</ulink>. (Instructions for submitting bug
    reports can be found <ulink
    url="http://bugs.gnome.org/Reporting.html" type="http">
    on-line</ulink>.  You can also use <application>Bug Report
    Tool</application> (<command>bug-buddy</command>), available in the
    <guisubmenu>Utilities</guisubmenu> submenu of <guimenu>Main
    Menu</guimenu>, for submitting bug reports.
   </para>

   <para>
    This manual was written by ME
    (<email>MYNAME@MYADDRESS</email>). Please send all comments and
    suggestions regarding this manual to the <ulink type="http"
    url="http://developer.gnome.org/projects/gdp">GNOME Documentation
    Project</ulink>  by sending an email to
    <email>docs@gnome.org</email>. You can also submit comments online
    by using the <ulink type="http"
    url="http://www.gnome.org/gdp/doctable/">GNOME Documentation
    Status Table</ulink>.
   </para>

   <!-- For translations: uncomment this:

   <para>
    Latin translation was done by ME
    (<email>MYNAME@MYADDRESS</email>). Please send all  comments  and
    suggestions regarding this translation to SOMEWHERE.
   </para>

   -->

  </sect2>


  <!-- ============= Application License ============================= -->

  <sect2 id="license">
   <title>License</title>
   <para>
    This program is free software; you can redistribute it and/or
    modify it under the terms of the <citetitle>GNU General Public
    License</citetitle> as published by the Free Software Foundation;
    either version 2 of the License, or (at your option) any later
    version.
   </para>
   <para>
    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    <citetitle>GNU General Public License</citetitle> for more details.
   </para>
   <para>
    A copy of the <citetitle>GNU General Public License</citetitle> is
    included as an appendix to the <citetitle>GNOME Users
    Guide</citetitle>.  You may also obtain a copy of the
    <citetitle>GNU General Public License</citetitle> from the Free
    Software Foundation by visiting <ulink type="http"
    url="http://www.fsf.org">their Web site</ulink> or by writing to
    <address>
     Free Software Foundation, Inc.
     <street>59 Temple Place</street> - Suite 330
     <city>Boston</city>, <state>MA</state> <postcode>02111-1307</postcode>
     <country>USA</country>
    </address>
   </para>
  </sect2>

 </sect1>




]]>



</programlisting>
      </para>
    </sect1>

<!-- ####### Document Templates | Templates 2-2.x: Applet Manual ####### -->

    <sect1 id="template2-2x">
      <title>Template 2: Applet Manual For GNOME 2.x</title>
      <para>
        The following templates should be used for all applet
        manuals in GNOME 2.x releases.  You can always get the latest
        copy of these templates from  <ulink type="http"
        url="http://developer.gnome.org/projects/gdp/templates.html">GDP
        Documentation Templates</ulink>.
      </para>
      <para>
        Note that this template consists of two files.  The first file
        is an introductory chapter. You should not modify this
        chapter. The second file is the actual applet document, which
        you should modify to describe the applet you are documenting.
        You can name the first file whatever you like, such as
        <filename>gnome-applets.sgml</filename>.  Name the second file
        according to the applet's name:
        <filename><replaceable>appletname</replaceable>-applet.sgml</filename>.
        Make sure you update the entity
        at the top of the shell document to reflect the new name of
        the applet document.
      </para>
      <para>
        <programlisting>
<![CDATA[
<!DOCTYPE book PUBLIC "-//GNOME//DTD DocBook PNG Variant V1.1//EN"[
<!ENTITY TEMPLATE-APPLET SYSTEM "gnome-applet-template.sgml.part">

]>

<book id="gnome-applets">

 <bookinfo>
  <title>GNOME Applets</title>
  <authorgroup>
   <author><firstname>Telsa</firstname><surname>Gwynne</surname></author>
   <author><firstname>John</firstname><surname>Fleck</surname></author>
   <author><firstname>David</firstname><surname>Mason</surname>
      <affiliation><orgname>Red Hat, Inc.</orgname></affiliation>
    </author>
    <author><firstname>Dan</firstname><surname>Mueth</surname></author>
    <author><firstname>Alexander</firstname><surname>Kirillov</surname></author>
  </authorgroup>
  <edition>GNOME Applets version 0.1 for GNOME 1.1.5</edition>
  <pubdate>2000</pubdate>
  <copyright>
   <year>2000</year>
   <holder>Telsa Gwynne, John Fleck, Red Hat Inc., Dan Mueth, and
    Alexander Kirillov</holder> 
  </copyright>
  <legalnotice>
   <para>
    Permission is granted to make and distribute verbatim copies of this
    manual provided the copyright notice and this permission notice are
    preserved on all copies.
   </para>
   <para>
    Permission is granted to copy and distribute modified versions of
    this manual under the conditions for verbatim copying, provided that
    the entire resulting derived work is distributed under the terms of a
    permission notice identical to this one.
   </para>
   <para>
    Permission is granted to copy and distribute translations of this
    manual into another language, under the above conditions for modified
    versions, except that this permission notice may be stated in a
    translation approved by the Free Software Foundation.
   </para>
   <para>
    Many of the names used by companies to distinguish their products and
    services are claimed as trademarks. Where those names appear in any
    GNOME documentation, and those trademarks are made aware to the members
    of the GNOME Documentation Project, the names have been printed in caps
    or initial caps.
   </para>
  </legalnotice>
 </bookinfo>

 <!-- #### Introduction ###### -->
 <chapter id="applets-intro">
  <title>Introduction</title> 

  <!-- #### Intro | What Are Applets? ###### -->
  <sect1 id="applets-what-are">
   <title>What Are Applets?</title> 
   <para>
    Applets are one of the most popular and useful objects you can add
    to your <interface>Panel</interface> to customize your desktop.
    An applet is a small application which runs inside a small area of
    your <interface>Panel</interface>. Applets have been written for
    a wide range of purposes.  Some are very powerful interactive
    tools, such as the <application>Tasklist</application> Applet
    which allows you to easily 
    control all of your main applications.  Others are simple system
    monitors, displaying information such as the amount of power left
    in the battery on your laptop (see <application>Battery Charge
    Monitor</application>) or weather
    information(see <application>GNOME Weather</application>).  Some
    are simply for amusement(see <application>Fish</application>).
   </para>

   <para>
    Applets are similar to swallowed applications in that both of them
    reside within the <interface>Panel</interface>. However, 
    swallowed applications are generally applications which were
    not designed to run within the <interface>Panel</interface>.
    Typically one will swallow an application which already exists in
    the main <interface>desktop</interface> area, putting it into your
    <interface>Panel</interface>.  The application will continue to
    run in the <interface>Panel</interface> until you end the
    application or  unswallow it,  placing it back onto the main part of
    your desktop when you need to.
   </para>

   <para>
    <figure id="example-applets-fig">
     <title>Example Applets</title>
     <screenshot>
      <screeninfo>Example Applets</screeninfo>
       <graphic fileref="example_applets" format="png"
       srccredit="muet">
       </graphic>
     </screenshot>
    </figure>
    Several example applets are shown in <xref
    linkend="example-applets-fig">.  From left to right, they are: (1)
    <application>Mixer Applet</application>, which allows you to turn
    on/off sound and control its volume by clicking on the applet.  (2)
    <application>Sound Monitor</application> Applet, which displays
    the current volume of sound being played and allows you to control
    various sound features.  (3) <application>GTCD</application>
    Applet, a CD player which has all its controls
    available in the applet and displays the track and time. (4)
    <application>Drive Mount</application> Applet, used to mount and
    unmount drives with a single click of the mouse. (5)
    <application>Desk Guide</application> which allows you to view
    and control multiple virtual screens. (6)
    <application>Tasklist</application> Applet which allows you to
    control your various windows and applications.
   </para>
   <para>
    There are many other applets to choose from.  The rest of this
    chapter will explain the basic information to get you started
    adding, moving, and removing applets from your
    <interface>Panels</interface> and using them. The following
    chapters go through each of the standard GNOME applets describing
    them in detail.  There are also additional applets which can be
    downloaded off the Web.   See <ulink type="http"
     url="http://www.gnome.org/applist/list-martin.phtml">The GNOME
    Software Map</ulink> for lists of additional GNOME applications
    and applets. 
   </para>
   <para>
    As you read through the the rest of this chapter, you should try
    adding and removing applets from your <interface>Panel</interface> and
    experiment with them freely.  
   </para>
  </sect1>

  <!-- #### Intro | Adding, Moving, and Removing Applets ###### -->
  <sect1 id="applet-add-move-replace">
   <title>Adding, Moving, and Removing Applets</title>

   <sect2 id="adding-applets">   
    <title>Adding Applets to a Panel</title>
    <para>
     To add an applet to a <interface>Panel</interface>, right-click
     on the <interface>Panel</interface> and select 
     <menuchoice><guimenu>Panel</guimenu><guisubmenu>Add to panel</guisubmenu>
     <guisubmenu>Applet</guisubmenu></menuchoice>. This will show you
     the menu of all the applets on your system, divided into
     categories. Choosing any applet from this menu will add it to the
     <interface>Panel</interface>.
    </para>
   </sect2>

   <sect2 id="moving-applets">
    <title>Moving Applets In or Between Panels</title>
    <para>
     It is easy to move applets in a <interface>Panel</interface> or
     between two <interface>Panels</interface>. If you have a
     three-button mouse, just move the mouse over the applet, depress
     the middle mouse button and drag the applet to its new location,
     releasing the middle mouse button when you are finished.  Note
     that you can drag applets within a <interface>Panel</interface>
     or between two <interface>Panels</interface> this way. If you
     don't have a three-button mouse, just 
     right-click on the applet and choose
     <guimenuitem>Move</guimenuitem>. The cursor will turn into a
     cross and the applet will move with your mouse until you press
     any mouse button to indicate you are finished moving it.
     If, in the course of this movement, it hits
     other objects, the behavior depends on the global preferences
     you have set for your <interface>Panels</interface> in the
     <application>GNOME Control Center</application>: the applet you are
     moving can switch places with other objects, "push" all objects
     it meets, or "jump" over all other objects without disturbing
     them. You can also override the default behavior by holding
     <keycap>Shift</keycap> button (for "push" mode),
     <keycap>Ctrl</keycap> (for "switched" mode), or
     <keycap>Alt</keycap> (for "free" mode, i.e. jumping other other
     objects without disturbing them) button while dragging.
    </para>
    <para>
     To change the global Panel preferences, right-click on any applet
     or <interface>Panel</interface> and select 
     <menuchoice>
      <guimenu>Panel</guimenu>
      <guimenuitem>Global Preferences...</guimenuitem>
     </menuchoice>.
     The <guilabel>Default movement mode</guilabel> is set under the
     <guilabel>Applets</guilabel> tab.
    </para>
   </sect2>

   <sect2 id="removing-applets">
    <title>Removing Applets from a Panel</title> 
    <para>  
     To remove an applet from a <interface>Panel</interface>,
     right-click on the applet and select <guimenuitem>Remove from
     panel...</guimenuitem>. 
    </para>
   </sect2>
  </sect1>


  <!-- #### Intro | The Right-Click Pop-Up Menu ###### -->
  <sect1 id="right-click-pop-up-menu">
   <title>The Right-Click Pop-Up Menu</title>
   <para>
    Clicking the right mouse button on any applet brings up
    a <guimenu>pop-up menu</guimenu>. This 
    menu always has certain standard menu items in it and
    often has additional items which vary depending on the particular
    applet. 
   </para>
   <sect2 id="standard-right-click-items"> 
    <title>Standard Pop-Up Items</title>
    <para>
     All applets should have the following items in their right-click
     <guimenu>pop-up menu</guimenu>:
     <variablelist>
      <varlistentry>
       <term>Remove from panel</term>
       <listitem>
        <para>
         The <guimenuitem>Remove from panel</guimenuitem> menu item
         removes the applet from the <interface>Panel</interface>. 
        </para>
       </listitem>
      </varlistentry>

      <varlistentry>
       <term>Move</term>
       <listitem>
        <para>
         After selecting <guimenuitem>Move</guimenuitem>, your mouse
         pointer will change appearance (typically to a cross with
         arrows in each direction). As you move your mouse, the applet
         will move with it.  When you have finished moving the applet,
         click any mouse button and the applet will anchor in its
         current position.  Note that applets can be moved between two
         <interface>Panels</interface> this way.
        </para>
       </listitem>
      </varlistentry>

      <varlistentry>
       <term>Panel</term>
       <listitem>
        <para>
         The <guisubmenu>Panel</guisubmenu> submenu contains various
         items and submenus for adding and removing
         <interface>Panels</interface> and applets and for changing
         the configuration.
        </para>
       </listitem>
      </varlistentry>

      <varlistentry>
       <term>About</term>
       <listitem>
        <para>
         The <guimenuitem>About...</guimenuitem> menu item brings up a 
         dialogue box containing various information about the applet,
         typically including the applet's  name, version, author,
         copyright, license and desciption. 
        </para>
       </listitem>
      </varlistentry>

      <varlistentry>
       <term>Help</term>
       <listitem>
        <para>
         The <guimenuitem>Help</guimenuitem> menu item brings up the help
         manual for the applet. 
        </para>
       </listitem>
      </varlistentry>
     </variablelist>
    </para>
   </sect2>

   <sect2 id="applet-properties-dialog"> 
    <title>The Applet Properties Dialog</title>
    <para>
     Many applets have customizable properties.  These applets will
     have a <guimenuitem>Properties...</guimenuitem> menu item in their
     right-click <guimenu>pop-up menu</guimenu> which brings up the
     <interface>Properties</interface> dialog where you can alter the 
     appearance or behaviour of the applet.
     <figure id="example-props-dialog-fig">
      <title>An Example Applet Properties Dialog</title>
      <screenshot>
       <screeninfo>An Example Applets Properties Dialog</screeninfo>
       <graphic fileref="applet_props_dialog" format="png"
        srccredit="muet">
       </graphic>
      </screenshot>
     </figure>
     All <interface>Properties</interface> dialogs have the following
     buttons at the bottom of the dialog:
     <itemizedlist>
      <listitem>
       <para>
        <guibutton>OK</guibutton> &mdash;
        Pressing <guibutton>OK</guibutton> will activate any changes
        in the properties you have made and close the
        <interface>Properties</interface> dialog.
       </para>
      </listitem>
      <listitem>
       <para>
        <guibutton>Apply</guibutton> &mdash;
        Pressing <guibutton>Apply</guibutton> at any time will
        make your changes active without closing the
        <interface>Properties</interface> dialog.  This is helpful if
        you would like to test the effects of the changes you have
        made but may want to continue changing the properties.
       </para>
      </listitem>
      <listitem>
       <para>
        <guibutton>Close</guibutton> &mdash;
        Pressing <guibutton>Close</guibutton> will close the
        <interface>Properties</interface> dialog.  Only changes in the
        configuration which were previously applied with the
        <guibutton>Apply</guibutton> button will persist.  Other
        changes will not be made active.
       </para>
      </listitem>
      <listitem>
       <para>
        <guibutton>Help</guibutton> &mdash;
        Pressing <guibutton>Help</guibutton> brings up the manual for
        the application, opening it to the page describing the
        <interface>Properties</interface> dialog.
       </para>
      </listitem>
     </itemizedlist>
    </para>
   </sect2>
 
   <sect2 id="common-right-click-items"> 
    <title>Other Common Pop-Up Items</title>
    <para>
     Many applets also have one or more of the following items in their
     right-click pop-up menu:
     <variablelist>
      <varlistentry>
       <term>Run...</term>
       <listitem>
        <para>
         The <guimenuitem>Run...</guimenuitem> menu item generally
         invokes a program  which is related to the applet in some way
         but which runs in its own window rather than in the
         panel. For example: 
        </para>
        <orderedlist>
         <listitem>
          <para>
           The <application>CPU Load</application> applet, which monitors
           what programs are running, has a <guimenuitem>Run
           gtop...</guimenuitem>  menu item. Selecting this menu item
           starts <application>GTop</application>, which allows you to
           view and control programs which are running.
          </para>
         </listitem>
         <listitem>
          <para>
           The <application>CD Player</application> applet has a
           <guimenuitem>Run gtcd...</guimenuitem> menu item which
           starts the GNOME <application>CD Player</application> when
           selected, which has more capabilities than the applet.
          </para>
         </listitem>
        </orderedlist>
       </listitem>
      </varlistentry>
     </variablelist>
    </para>
   </sect2>
  </sect1>
  
  <sect1 id="feedback">
   <title>Feedback</title>
   <sect2 id="reporting-bugs"> 
    <title>Reporting Applet Bugs</title>
    <para>
     GNOME users are encouraged to report bugs to <ulink type="http"
     url="http://bugs.gnome.org">The GNOME Bug Tracking
     System</ulink>.  The easiest way to submit bugs is to use the
     <application>Bug Report Tool</application> program by selecting
     <menuchoice>
      <guimenu>Main Menu</guimenu> <guisubmenu>Utilities</guisubmenu>
      <guimenuitem>Bug Report Tool</guimenuitem> 
     </menuchoice>.
     Be sure to be complete in describing what you did to cause the
     bug to surface and, if possible, describe how the developer can
     reproduce the the scenario.
    </para>
   </sect2>
   <sect2 id="documentation-feedback"> 
    <title>Providing Feedback</title>
    <para>
     GNOME users are welcome to provide suggestions for how
     applications and documentation can be improved.  Suggestions for
     application changes should be submitted using the
     <application>Bug Report Tool</application> discussed above.
     Suggestions for documentation changes can be emailed directly to
     the documentation author (whose email should be included in the
     "Authors" section of the document) or by sending an email to
     <email>docs@gnome.org</email>. 
    </para>
   </sect2>
   <sect2 id="joining-gnome">  
    <title>Joining GNOME</title>
    <para>
     GNOME is a community project, created by hundreds of programmers,
     documentation writers, icon design artists, web masters, and
     other people, most of whom work on a volunteer basis.  New GNOME
     contributors are always welcome. To join the GNOME team, visit
     these web sites: developers &mdash; <ulink type="http"
     url="http://developer.gnome.org">The GNOME Development
     Site</ulink>, documentation writers &mdash; <ulink type="http"
     url="http://developer.gnome.org/projects/gdp">The GNOME Documentation
     Project</ulink>, icon design artists &mdash; <ulink type="http"
     url="http://gnome-icons.sourceforge.net/">Gnome Icon Web</ulink>,
     general &mdash; <ulink type="http"
     url="http://developer.gnome.org/helping/">Helping GNOME</ulink>,
     or just join the gnome-list email list (see <ulink type="http"
     url="http://www.gnome.org/resources/mailing-lists.html">GNOME Mailing
     Lists</ulink>) to discuss what you are interested in doing.
    </para>
   </sect2>
  </sect1>
 </chapter>

 <!-- ############### Template Applets ##################### -->
 <chapter id="template-applets">
  <title>Template Applets</title>

  &TEMPLATE-APPLET

 </chapter>

</book>







]]>
	</programlisting>
	
        <programlisting>
<![CDATA[

  <!-- Please replace everywhere below GNOMEAPPLET with the name of -->
  <!-- your applet. Most importantly, all id attributes should start -->
  <!-- with the name of your applet - this is necessary to avoid name -->
  <!-- conflict among different applets --> 
  <!-- Please replace YOUR-NAME with your name and YOUR-EMAIL with your email-->
  <!-- Please replace HACKER-NAME with the applet author's name and -->
  <!-- HACKER-EMAIL with the applet author's email -->

  <!-- You should name your file: GNOMEAPPLET-applet.sgml -->
  <!-- Screenshots should be in PNG format and placed in the -->
  <!-- same directory as GNOMEAPPLET-applet.sgml -->

  <!-- Applet docs will be merged into <chapter>'s inside a -->
  <!-- <book>. Thus, the indentation below (2 spaces before the <sect1>) is -->
  <!-- correct.-->

  <!-- Permission is granted to make and distribute verbatim copies of -->
  <!-- this manual provided the copyright notice and this permission -->
  <!-- notice are  preserved on all copies. -->
  <!-- -->
  <!-- Permission is granted to copy and distribute modified versions of -->
  <!-- this manual under the conditions for verbatim copying, provided -->
  <!-- that the entire resulting derived work is distributed under the -->
  <!-- terms of a permission notice identical to this one. -->
  <!-- -->
  <!-- Permission is granted to copy and distribute translations of this -->
  <!-- manual into another language, under the above conditions for -->
  <!-- modified versions, except that this permission notice may be -->
  <!-- stated in a translation approved by the Foundation. -->

  <!-- ###############   GNOMEAPPLET   ############### -->
  <sect1 id="GNOMEAPPLET">
   <title>GNOMEAPPLET Applet</title> 

   <para> 
    <application>GNOMEAPPLET</application> applet, shown in <xref
    linkend="GNOMEAPPLET-fig">, does this and that. To learn how to
    add this applet to a <interface>Panel</interface>, see <xref
    linkend="adding-applets">. 
   </para>
  
 
   <figure id="GNOMEAPPLET-fig">
   <title>GNOMEAPPLET</title>
   <screenshot>
    <screeninfo>GNOMEAPPLET</screeninfo>
    <graphic format="png" fileref="GNOMEAPPLET-fig" srccredit="ME">
    </graphic>
   </screenshot>
   </figure>

   <sect2 id="GNOMEAPPLET-usage">
    <title>Usage</title>
    <para>
     This applet does nothing. To use it, just
     left-click on it and it will instantly do nothing.   
    </para>
   </sect2>

   <sect2 id="GNOMEAPPLET-right-click">
    <title>Right-Click Pop-Up Menu Items</title>
    <para> 
     In addition to the standard menu items (see <xref
     linkend="standard-right-click-items">), the right-click pop-up menu has 
     the following items: 
     <itemizedlist> 	
      <listitem>
       <para>
        <guimenuitem>Properties...</guimenuitem> &mdash; This menu
        item opens the <interface>Properties</interface> dialog (see
        <xref linkend="GNOMEAPPLET-properties">) which allows you to
        customize the appearance and behavior of this applet.
       </para>
      </listitem>
      <listitem>
       <para>
        <guimenuitem>Run Hello World...</guimenuitem> &mdash; This
        menu item starts the program <application>Hello
        World</application>, used to say "hello" to the world. 
       </para>
      </listitem>
     </itemizedlist>
    </para>
   </sect2>

   <sect2 id="GNOMEAPPLET-properties">
    <title>Properties</title>
    <para>
     You can configure <application>GNOMEAPPLET</application> applet by
     right-clicking on the applet and choosing the
     <guimenuitem>Properties...</guimenuitem> menu item. This will open the
     <interface>Properties</interface> dialog, shown in <xref
     linkend="GNOMEAPPLET-properties-fig">.
    </para>
    <figure id="GNOMEAPPLET-properties-fig">
     <title>Properties Dialog</title>
     <screenshot>
      <screeninfo>Properties Dialog</screeninfo> 
      <graphic format="png" fileref="GNOMEAPPLET-properties" srccredit="ME">
      </graphic>
     </screenshot>
    </figure>
    
    <para> 
     To change the color of the applet, click on the
     <guibutton>color</guibutton> button. To change other properties,
     click on other buttons. 
    </para>

    <para>
     For more information on the <interface>Properties</interface>
     dialog, including descriptions of the <guibutton>OK</guibutton>,
     <guibutton>Apply</guibutton>, <guibutton>Cancel</guibutton>, and
     <guibutton>Help</guibutton> buttons, see <xref
     linkend="applet-properties-dialog">.
    </para>
   </sect2>
  
   <sect2 id="GNOMEAPPLET-bugs">
    <title> Known Bugs and Limitations</title>
    <para>
     There are no known bugs in the
     <application>GNOMEAPPLET</application> applet. 
    </para>
   </sect2>

   <sect2 id="GNOMEAPPLET-authors">
    <title>Authors</title>
    <para>
     This applet was writen by HACKER-NAME
     <email>HACKER-EMAIL</email>.  The documentation for this applet
     which you are reading now was written by
     YOUR-NAME <email>YOUR-EMAIL</email>. For information on submitting
     bug reports and suggestions for improvements, see <xref
     linkend="feedback">. 
    </para>
   </sect2>

  </sect1>





]]>


</programlisting>
      </para>
    </sect1>

<!-- ####### Document Templates | Templates 3: Application Help ####### 

    <sect1 id="template3">
      <title>Template 2: Application Help</title>
      <programlisting>
<![CDATA[(Put sgml here.)]]> </programlisting>
    </sect1>

####### Document Templates | Templates 4: Application Context Sensitive Help #######

    <sect1 id="template4">
      <title>Template 3: Application Context Sensitive Help</title>
      <para>
        Context sensitive help is still in development.
      </para>
    </sect1>

####### Document Templates | Templates 5: Complete Application: gnome-hello  ####### 

    <sect1 id="template5">
      <title>Template 4: Complete Application: gnome-hello</title>
      <programlisting>
<![CDATA[(Put sgml here.)]]>
      </programlisting>  
    </sect1>

####### Document Templates | Templates 6: Tutorial ####### 

    <sect1 id="template6">
      <title>Template 5: Tutorial</title>
      <programlisting>
<![CDATA[(Put sgml here.)]]>
      </programlisting>  
    </sect1>-->
  </appendix>

</article>
