浏览代码

+ Added fpdoc

michael 22 年之前
父节点
当前提交
b164a9ff9f
共有 5 个文件被更改,包括 1718 次插入3 次删除
  1. 8 2
      docs/Makefile
  2. 1 0
      docs/Makefile.4ht
  3. 1 1
      docs/Makefile.hev
  4. 14 0
      docs/Makefile.l2h
  5. 1694 0
      docs/fpdoc.tex

+ 8 - 2
docs/Makefile

@@ -22,7 +22,7 @@
 #INSTALLDEBUG=1
 
 # Which docs are made when 'html' is specified
-HTML = user units ref prog
+HTML = user units ref prog fpdoc
 
 # Can be 'report','book', 'html', 'hevea', 'ts3' 'ts4'
 ifdef USEHEVEA
@@ -332,6 +332,8 @@ prog.dvi: prog.tex includes
 
 user.dvi: user.tex includes
 
+fpdoc.dvi: fpdoc.tex includes
+
 units.pdf: units.tex includes $(CHAPTERS)
 
 ref.pdf: ref.tex includes
@@ -344,6 +346,7 @@ onechap.pdf: onechap.tex includes
 
 onechap.dvi: onechap.tex includes
 
+fpdoc.pdf: fpdoc.tex includes
 
 dvi : $(DVI)
 
@@ -537,7 +540,10 @@ execute:
 
 #
 # $Log$
-# Revision 1.19  2003-03-17 08:27:27  michael
+# Revision 1.20  2003-03-18 00:14:51  michael
+# + Added fpdoc
+#
+# Revision 1.19  2003/03/17 08:27:27  michael
 # + Split out html generation
 #
 # Revision 1.18  2003/03/16 15:24:58  peter

+ 1 - 0
docs/Makefile.4ht

@@ -26,5 +26,6 @@ units: htmlincludes preamble3 units.html
 prog: htmlincludes preamble3 prog.html
 onechap: htmlincludes preamble3 onechap.html
 ref: htmlincludes preamble4 ref.html
+fpdoc: htmlincludes preamble3 fpdoc.html
 
 html: htmlincludes $(HTML)

+ 1 - 1
docs/Makefile.hev

@@ -12,6 +12,6 @@ units: htmlincludes units.html
 prog: htmlincludes prog.html
 onechap: htmlincludes onechap.html
 ref: htmlincludes ref.html
+fpdoc: htmlincludes fpdoc.html
 
 html: htmlincludes $(addsuffix .html,$(HTML))
-

+ 14 - 0
docs/Makefile.l2h

@@ -86,5 +86,19 @@ ifndef DEBUG
 endif
 	touch onechap.chk	
 
+fpdoc: fpdoc.chk
+fpdoc.chk: htex.chk includes
+	cp -f preamble.html preamble.inc
+	$(LATEX2HTML) $(LATEX2HTMLOPTS) -split 2 -link 2\
+	-t "Free Pascal documentation tool manual" fpdoc.htex
+	-sed -f foot.sed <fpdoc/footnode.html >fpdoc/footnote.html
+	-mv fpdoc/footnote.html fpdoc/footnode.html
+ifndef DEBUG
+	-rm -f fpdoc/labels.pl fpdoc/internals.pl fpdoc/.*.pag fpdoc/.*.dir
+	-rm -f fpdoc/images.* fpdoc/*.log fpdoc/WARNINGS
+endif
+	touch fpdoc.chk
+
+
 html: $(HTML)
 

+ 1694 - 0
docs/fpdoc.tex

@@ -0,0 +1,1694 @@
+%
+%   $Id$
+%   This file is part of the FPC documentation.
+%   Copyright (C) 1997, by Michael Van Canneyt
+%
+%   The FPC documentation is free text; you can redistribute it and/or
+%   modify it under the terms of the GNU Library General Public License as
+%   published by the Free Software Foundation; either version 2 of the
+%   License, or (at your option) any later version.
+%
+%   The FPC Documentation 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 GNU
+%   Library General Public License for more details.
+%
+%   You should have received a copy of the GNU Library General Public
+%   License along with the FPC documentation; see the file COPYING.LIB.  If not,
+%   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+%   Boston, MA 02111-1307, USA.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Preamble.
+\input{preamble.inc}
+\latex{%
+  \ifpdf
+  \pdfinfo{/Author(Michael Van Canneyt)
+           /Title(Users' Guide)
+           /Subject(FPDoc Users' guide)
+           /Keywords(Free Pascal)
+           }
+\fi}
+%
+% Settings
+%
+\makeindex
+%
+% Start of document.
+%
+\newcommand{\fpdoc}{\textsc{FPDoc}\xspace}
+\newcommand{\seesu}[1]{section \ref{suse:#1}, page \pageref{suse:#1}\xspace}
+\newcommand{\seetag}[1]{\tag{#1} (\pageref{tag:#1})\xspace}
+\newcommand{\tag}[1]{\textbf{#1}}
+\newcommand{\attr}[1]{\textit{#1}}
+\usepackage{tabularx}
+\usepackage{syntax}
+\begin{document}
+\title{FPDoc :\\Free Pascal code documenter: Reference manual}
+\docdescription{Reference manual for FPDoc}
+\docversion{0.9}
+\date{\today}
+\author{Micha\"el Van Canneyt}
+\maketitle
+\tableofcontents
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Introduction
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Introduction}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% About this document
+\section{About this document}
+This is the reference manual for \fpdoc, a free documentation tool for 
+Pascal units. It describes the usage of \fpdoc and how to write 
+documentation with it. 
+
+It attempts to be complete, but the tool is under continuous development,
+and so there may be some slight differences between the documentation and
+the actual program. In case of discrepancy, the sources of the tool are the
+final reference. A \file{README} or \file{CHANGES} file may be provided, and
+can also give some hints as to things which have changed. In case of doubt,
+these files or the sources are authoritative.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% About FPDoc
+\section{About \fpdoc}
+\fpdoc is a tool that combines a Pascal unit file and a description file
+in XML format and produces reference documentation for the unit. The
+reference documentation contains documentation for all of the identifiers
+found in the unit's interface section. The documentation is fully
+cross-referenced, making it easy to navigate. It is also possible to refer
+to other documentation sets written with \fpdoc, making it possible to
+maintain larger documentation sets for large projects.
+
+Contrary to some other documentation techniques, \fpdoc does not require the
+presence of formatted comments in the source code. It takes a source file
+and a documentation file (in XML format) and merges these two together to a
+full documentation of the source. This means that the code doesn't get
+obfuscated with large pieces of comment, making it hard to read and
+understand. 
+
+\fpdoc is package-oriented, which means that it considers units as part of a
+package. Documentation for all units in a package can be generated in one
+run.
+
+At the moment of writing, the documentation can be generated in the
+following formats:
+\begin{description}
+\item[HTML] Plain HTML. Javascript is used to be able to show a small window
+with class properties or class methods, but the generated HTML will work
+without JavaScript as well. Style sheets are used to do the markup, so the
+output can be customised.
+\item[XHTML] As HTML, but using a more strict syntax.
+\item[LaTeX] LaTeX files, which can be used with the \file{fpc.sty} file
+which comes with the \fpc documentation. From this output, PDF documents can
+be generated, and with the use of latex2rtf, RTF or Winhelp files. Text
+files can also be generated.
+\end{description}
+Plans exist to create direct text output and RTF output as well.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Getting more information.
+\section{Getting more information.}
+If the documentation doesn't give an answer to your questions,
+you can obtain more information on the Internet, on the following address: 
+
+\htmladdnormallink{http://fpdoc.freepascal.org/}
+{http://fpdoc.freepascal.org} 
+
+It contains links to download all \fpdoc related material.
+
+Finally, if you think something should be added to this manual
+(entirely possible), please do not hesitate and contact me at
+\htmladdnormallink{[email protected]}{mailto:[email protected]}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Installation
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Compiling and Installing \fpdoc}
+\label{ch:Installation}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Compiling
+\section{Compiling}
+In order to compile \fpdoc, the following things are needed:
+\begin{enumerate}
+\item The fpdoc sources. These can be downloaded from the \fpdoc website.
+\item The \fpc compiler sources. \fpdoc uses the scanner from the \fpc
+comiler to scan the source file.
+\item The FCL units (or their sources) should be installed. 
+\item fpcmake is needed to create the makefile for fpdoc. It comes with
+\fpc, so if \fpc is installed, there should be no problem.
+\item To make new internationalisation support files, \file{rstconv} must be
+installed, and the GNU gettext package.
+\end{enumerate}
+Links to download all these programs can be found on the \fpdoc website.
+
+When the fpdoc sources have been unzipped, the Makefile must be generated.
+Before generating the makefile, the location of the compiler source
+directory should be indicated. In the \file{Makefile.fpc} file, which has a 
+windows ini file format, locate the \var{fpcdir} entry in the \var{defaults} 
+section:
+\begin{verbatim}
+fpcdir=../..
+\end{verbatim}
+and change it so it points to the top-level \fpc source directory.
+
+After that, running \file{fpcmake} will produce the \file{Makefile}, and
+running \file{make} should produce 2 executables: \file{fpdoc} and
+\file{makeskel}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Installation
+\section{Installation}
+
+When installing from sources, a simple 
+\begin{verbatim}
+make install
+cd intl
+make install
+\end{verbatim}
+should completely install the documentation tool.
+
+When installing from a archive with the binaries, it should be sufficient
+to copy the binaries to a directory in the \var{PATH}.
+
+To have fpdoc available in several languages, the language files should be
+installed in the following directory on Unix systems:
+\begin{verbatim}
+/usr/local/share/locale/XX/LC_MESSAGES/
+\end{verbatim}
+or
+\begin{verbatim}
+/usr/share/locale/XX/LC_MESSAGES/
+\end{verbatim}
+Depending on the setup. Here \var{XX} should be replaced by the locale 
+identifier.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Usage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{\fpdoc usage}
+\label{ch:usage}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Usage
+\section{fpdoc}
+Using \fpdoc is quite simple. It takes some command-line options, and based
+on these options, creates documentation. The command-line options can be
+given as long or short options, as is common for most GNU programs.
+
+In principle, only 2 command-line options are needed:
+\begin{description}
+\item[package] This specifies the name of the package for which
+documentation must be created. Exactly one package option can be 
+specified.
+\item[input] The name of a unit file for which documentation should be
+generated. This can be a simple filename, but can also contain some syntax
+options as they could be given to the \fpc scanner. More than one
+\var{input} option can be given, and documentation will be generated for all
+specified input files.
+\end{description}
+
+Some examples:
+\begin{verbatim}
+fpdoc --package=fcl --input=crt.pp
+\end{verbatim}
+This will scan the \file{crt.pp} file and generate documentation for it
+in a directory called \file{fcl}.
+\begin{verbatim}
+fpdoc --package=fcl --input='-I../inc -S2 -DDebug classes.pp'
+\end{verbatim}
+This will scan the file \file{classes.pp}, with the \var{DEBUG} symbol
+defined, the scanner will look for include files in the \file{../inc}
+directory, and \var{OBJFPC}-mode syntax will be accepted.
+
+(for more information about these options, see the \fpc compiler user's
+guide)
+
+With the above commands, a set of documentation files will be generated in
+HTML format (this is the standard). There will be no description of any of
+the identifiers found in the unit's interface section, but all identifiers
+declarations will be present in the documentation. 
+
+The actual documentation (i.e. the description of each of the identifiers) 
+resides in a description file, which can be specified with the \var{descr} 
+option:
+
+\begin{verbatim}
+fpdoc --package=fcl --descr=crt.xml --input=crt.pp
+\end{verbatim}
+This will scan the \file{crt.pp} file and generate documentation for it,
+using the descriptions found in the file{crt.xml} file. The documentation
+will be written in a directory called \file{fcl}.
+\begin{verbatim}
+fpdoc --package=fcl --descr=classes.xml \
+      --input='-I../inc -S2 -DDebug classes.pp'
+\end{verbatim}
+All options should be given on one line.
+This will scan the file \file{classes.pp}, with the \var{DEBUG} symbol
+defined, the scanner will look for include files in the \file{../inc}
+directory, and \var{OBJFPC}-mode syntax will be accepted.
+
+More than one input file or description file can be given:
+\begin{verbatim}
+fpdoc --package=fcl --descr=classes.xml --descr=process.xml \
+      --input='-I../inc -S2 -DDebug classes.pp' \
+      --input='-I../inc -S2 -DDebug process.pp'
+\end{verbatim}
+Here, documentation will be generated for 2 units: \file{classes}
+and \var{process}
+
+The format of the description file is discussed in the next chapter.
+
+Other formats can be generated, such as latex:
+\begin{verbatim}
+fpdoc --format=latex --package=fcl \
+      --descr=classes.xml --descr=process.xml\
+      --input='-I../inc -S2 -DDebug classes.pp' \
+      --input='-I../inc -S2 -DDebug process.pp'
+\end{verbatim}
+This will generate a LaTeX file called \file{fcl.tex}, which contains the
+documentation of the units \file{classes} and \var{process}. The latex file
+contains no document preamble, it starts with a chapter command. 
+It is meant to be included (using the LaTeX include command) in a latex 
+document with a preamble.
+
+The output of \fpdoc can be further customised by several command-line
+options, which will be explained in the next section.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Usage
+\section{\fpdoc command-line options reference}
+In this section all \fpdoc command-line options are explained.
+
+% content
+\subsection{content}
+\label{suse:content}
+This option tells  \fpdoc to generate a content file. 
+A content file contains a list of all the
+possible anchors (labels) in the generated documentation file, and can be
+used to create cross-links in documentation for units in other packages, 
+using the counterpart of the content option, the \var{import} option
+(\seesu{import}).
+
+%descr
+\subsection{descr}
+\label{suse:descr}
+This option specifies the name of a description file that contains the 
+actual documentation for the unit. This option can be given several 
+times, for several description files. The file will be searched relative to
+the current directory. No extension is added to the file, it should be a
+complete filename.
+
+If the filename starts with an 'at' sign \var{@}, then it is interpreted
+as a text file which contains a list of filenames, one per line. 
+Each of these files will be added to the list of description files.
+
+The nodes in the description files will be merged into one big tree. This
+means that the documentation can be divided over multiple files. When
+merging the description files, nodes that occur twice will end up only once
+in the big node tree: the last node will always be the node that ends up in
+the parse tree. This means that the order of the various input commands or
+the ordering of the files in the file list is important.
+
+Examples:
+\begin{verbatim}
+--descr=crt.xml 
+\end{verbatim}
+will tell \fpdoc to read documentation from \file{crt.xml}, while
+\begin{verbatim}
[email protected] 
+\end{verbatim}
+will tell \fpdoc to read filenames from \file{fcl.lst}; each of the
+filenames found in it will be added to the list of files to be scanned for
+descriptions.
+
+%format
+\subsection{format}
+\label{suse:format}
+Specifies the output format in which the documentation will be generated. 
+Currently, the following formats are known:
+\begin{description}
+\item[htm] Plain HTML with 8.3 conforming filenames. 
+\item[html] HTML with long filenames.
+\item[xhtml] XHTML with long filenames.
+\item[latex] LaTex, which uses the \file{fpc.sty} style used by the \fpc
+documentation. 
+\item[xml-struct] Structured XML.
+\end{description}
+
+% help
+\subsection{help}
+Gives a short copyright notice.
+
+% hide-protected
+\subsection{hide-protected}
+\label{suse:hideprotected}
+By default, the documentation will include descriptions and listings of
+protected fields and methods in classes or objects. This option changes this
+behaviour; if it is specified, no documentation will be generated for these
+methods. Note that public methods or properties that refer to these
+protected methods will then have a dangling (i.e. unavailable) link.
+
+% html-search
+\subsection{html-search}
+\label{suse:htmlsearch}
+This option can be used when generating HTML documentation, to specify an
+url that can be used to search in the generated documentation. The URL will be
+included in the header of each generated page with a \var{Search} caption.
+The option is ignored for non-html output formats.
+
+\fpdoc does not generate a search page, this should be made by some external
+tool. Only the url to such a page can be specified.
+
+Example:
+\begin{verbatim}
+--html-search=../search.html
+\end{verbatim}
+
+% import
+\subsection{import}
+\label{suse:import}
+Import a table of contents file, generated by \fpdoc for another package
+with the \var{content} option (\seesu{content}). This option can be used 
+to refer to documentation nodes in documentation sets for other packages. 
+The argument consists of two parts: a filename, and a link prefix. 
+
+The filename is the name of the file that will be imported. The link
+prefix is a prefix that will be made to each HTML link; this needs to be
+done to be able to place the files in different directories.
+
+Example:
+\begin{verbatim}
+--import=../fcl.cnt,../fcl
+\end{verbatim}
+This will read the file fcl.cnt in the parent directory. For HTML
+documentation, all links to items in the fcl.cnt file, the link will be
+prepended with \file{../fcl}.
+
+This allows a setup where all packages have their own subdirectory of a
+common documentation directory, and all content files reside in the main
+documentation directory, as e.g. in the following directory tree:
+\begin{verbatim}
+/docs/fcl
+     /fpdoc
+     /fpgui
+     /fpgfx
+     /fpimg
+\end{verbatim}
+The file fcl.cnt would reside in the \file{docs} directory. Similarly, for
+each package a contents file \file{xxx.cnt} could be places in that
+directory. Inside the subdirectory, commands as the above could be used to
+provide links to other documentation packages.
+
+Note that for Latex documentation, this option is ignored.
+
+% input
+\subsection{input}
+\label{suse:input}
+This option tells \fpdoc what input file should be used. The argument can 
+be just a filename, but can also be a complete compiler command-line with 
+options that concern the scanning of the Pascal source: defines, include 
+files, syntax options,  as they would be specified to the \fpc compiler 
+when compiling the file. If a complete command is used, then it should be 
+enclosed in single or double quotes, so the shell will not break them in 
+parts.
+
+It is possible to specify multiple input commands; they will be treated one
+by one, and documentation will be generated for each of the processed files.
+
+% lang
+\subsection{lang}
+\label{suse:lang}
+Select the language for the generated documentation. This will change all
+header names to the equivalent in the specified language. The documentation
+itself will not be translated, only the captions and headers used in the
+text.
+
+Currently, valid choices are
+\begin{description}
+\item[de] German.
+\item[fr] French.
+\item[nl] Dutch.
+\end{description}
+
+Example:
+\begin{verbatim}
+--lang=de
+\end{verbatim}
+Will select German language for headers.
+
+The language files should be installed correctly for this option to work.
+See the section on installing to check whether the languages are installed
+correctly.
+
+% latex-highlight
+\subsection{latex-highlight}
+\label{suse:latexhighlight}
+Switches on an internal latex syntax highlighter. This is not yet
+implemented. By default, syntax highlighting is provided by the syntax
+package that comes with \fpc.
+
+% output
+\subsection{output}
+\label{suse:output}
+This option tells  \fpdoc where the output file should be generated. 
+How this option is interpreted depends on the format that is used. 
+For latex, this is interpreted as the filename for the tex file. 
+For all other formats, this is interpreted as the directory where all 
+documentation files will be written. The directory will be created if 
+it does not yet exist.
+
+The filename or directory name is interpreted as relative to the current
+directory.
+
+Example:
+\begin{verbatim}
+--format=html --output=docs/classes
+\end{verbatim}
+will generate HTML documentation in the directory \file{docs/classes}.
+\begin{verbatim}
+--format=latex --output=docs/classes.tex
+\end{verbatim}
+will generate latex documentation in the file \file{docs/classes}.
+
+% package
+\subsection{package}
+\label{suse:package}
+This option specifies the name of the package to be used. The package name
+will also be used as a default for the \var{output} option (\seesu{output}).
+
+% show-private
+\subsection{show-private}
+\label{suse:showprivate}
+By default, no documentation is generated for private methods or fields of
+classes or objects. This option causes \fpdoc to generate documentation 
+for these methods and fields as well.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Makeskel
+\section{makeskel}
+\label{se:makeskel}
+
+% Introduction
+\subsection{introduction}
+\label{suse:makeskelintro}
+The makeskel tool can be used to generate an empty description file 
+for a unit. The description file will contain an element node for each
+identifier in the interface section of the Pascal unit. 
+
+It's usage is quite straightforward: the name of an input file 
+(one or more) must be specified (as for \fpdoc), an output file,
+and the name of a package:
+\begin{verbatim}
+makeskel --package=rtl --input=crt.pp --output=crt.xml
+\end{verbatim}
+This will read the file \file{crt.pp} and will create a file \file{crt.xml}
+which contains empty nodes for all identifiers found in \file{crt.pp}, all
+in a package named \var{rtl}.
+
+The \var{input} option can be given more than once, as for the \file{fpdoc}
+command:
+\begin{verbatim}
+makeskel --input='-Sn system.pp' --input=crt.pp --output=rtl.xml
+\end{verbatim}
+As can be seen, the \var{input} option can contain some compiler options,
+as is the case for \fpdoc. The above command will process the files
+\file{system.pp} and \var{crt.pp}, and will create \tag{element} tags 
+for the identifiers in both units in the file \var{rtl.xml}.
+
+The output of \file{makeskel} is a valid, empty description file. It will
+contain a \tag{module} tag for each unit specified, and each \tag{module}
+will have \tag{element} tags for each identifier in the unit. 
+
+Each \tag{element} tag will by default contain \tag{short}, \tag{descr},
+\tag{errors} and \tag{seealso} tags, but this can be customised.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Makeskel
+\section{Makeskel option reference}
+\label{se:makeskeloption}
+The output of \file{makeskel} can be customised using several options, which
+are discussed below.
+
+% disable-arguments
+\subsection{disable-arguments}
+\label{suse:msdisablearguments}
+By default, for each function or procedure argument, a \tag{element} tag will
+be generated. This option disables this behaviour: no \tag{element} tags
+will be generated for procedure and function arguments.
+
+% disable-errors
+\subsection{disable-errors}
+\label{suse:msdisableerrors}
+If this option is specified, no \tag{errors} tag will be generated in the
+element nodes. By default all element tags contain a \tag{errors} node.
+
+The \tag{errors} tag is ignored when it is not needed; Normally, an 
+\tag{errors} tag is only needed for procedure and function elements.
+
+% disable-function-results
+\subsection{disable-function-results}
+\label{suse:disablefunctionresults}
+If this option is specified, then no \tag{element} tag will be generated for
+function results. By default, \file{makeskel} will generate a result node
+for each function in the interface section. The result node is used in the
+documentation to document the return value of the function under a separate
+heading in the documentation page. Specifying this option suppresses the
+generation of the \tag{element} tag for the function result.
+
+% disable-private
+\subsection{disable-private}
+\label{suse:disableprivate}
+If this option is specified, then no \tag{element} tags will be generated
+for private methods or fields of classes or objects. 
+The default behaviour is to generate nodes for private methods or fields.
+It can be used to generate a skeleton for end-user and developer
+documentation.
+
+% disable-protected
+\subsection{disable-protected}
+\label{suse:disableprotected}
+If this option is specified, then no \tag{element} tags will be generated
+for protected and private methods or fields of classes or objects. 
+The default is to generate nodes for protected methods or fields. If this
+option is given, the option \var{--disable-private} is implied. It can be
+used to generate end-user-only documentation for classes. 
+
+
+% disable-seealso
+\subsection{disable-seealso}
+\label{suse:msdisableseealso}
+If this option is specified, no \tag{seealso} tag will be generated in the
+element nodes. By default all \tag{element} tags contain a \tag{seealso} tag.
+
+
+% emitclassseparator
+\subsection{emitclassseparator}
+\label{suse:msemitclassseparator}
+When this option is specified, at the beginning of the elements for the
+documentation of a class, a comment tag is emitted which contains a
+separator text. This can be useful to separate documentation of different
+classes and make the description file more understandable.
+
+% help
+\subsection{help}
+\label{suse:mshelp}
+\file{Makeskel} emits a short copyright notice and exits when this option is
+specified.
+
+% input
+\subsection{input}
+\label{suse:msinput}
+This option is identical in meaning and functionality as the \var{input}
+option for \fpdoc. (\seesu{input}) It specifies the Pascal unit source 
+file that will be scanned and for which a skeleton description file will be
+generated. Multiple \var{input} options can be given, and \tag{element}
+tags will be written for all the files, in one big output file.
+
+% lang
+\subsection{lang}
+\label{suse:mslang}
+This option is used to specify the language for messages emitted by
+\file{makeskel}. The supported languages are identical to the ones 
+for \fpdoc:
+\begin{description}
+\item[de] German.
+\item[fr] French.
+\item[nl] Dutch.
+\end{description}
+
+% output
+\subsection{output}
+\label{suse:msoutput}
+This option specifies the name of the output file. A full filename must be
+given, no extension will be added. If this option is omitted, the output
+will be sent to standard output.
+
+% package
+\subsection{package}
+\label{suse:mspackage}
+This option specifies the package name that will be used when generating the
+skeleton. It is a mandatory option. 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The description file.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{The description file}
+\label{ch:descriptionfile}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Introduction
+\section{Introduction}
+The description file is a XML document, which means that it is a kind of
+HTML or SGML like format, however it is more structured than HTML, making it
+easier to parse - and makes it easier to connect or merge it with a Pascal
+source file. Since the allowed syntax uses a lot of HTML tags, this makes 
+it easy to write code for those that are familiar with writing HTML.
+
+More information about the XML format, SGML and HTML can be found on the 
+website of the W3 (World Wide Web) consortium:  
+\htmladdnormallink{http://www.w3.org/}{http://www.w3.org} 
+
+The remaining of this chapter assumes a basic knowledge of tags, their
+attributes and markup language, so these terms will not be explained here. 
+
+The minimal documentation file would look something like this:
+\begin{verbatim}
+<?xml version="1.0" encoding="ISO8859-1"?>
+<fpdoc-descriptions>
+<package name="fpc">
+<module name="Classes">
+</module>
+</fpdoc-description>
+</package>
+\end{verbatim}
+The header \tag{xml} tag is mandatory, and indicates that the file contains a
+documentation XML document.
+
+Inside the document, one or more top-level \tag{fpdoc-descriptions} 
+tags may appear. Each of these tags can contain one or more \tag{package}
+tags, which must have a \attr{name} attribute. The name attribute will be
+used by fpdoc to select the documentation nodes.
+
+Inside a \tag{package} tag, one or more \tag{module} tags may appear. there
+should be one \tag{module} tag per unit that should be documented. The value
+of the \attr{name} attribute of the \var{module} should be the name of the
+unit for which the \tag{module} tag contains the documentation. The value
+of the \var{name} attribute is case insensitive, i.e. 
+\begin{verbatim}
+<module name="CRT">
+\end{verbatim}
+can be used for the documentation of the \file{crt} unit.
+
+As it is above, the documentation description does not do much. To write
+real documentation, the \tag{module} tag must be filled with the
+documentation for each identifier that appears in the unit interface header.
+
+For each identifier in the unit interface header, the \tag{module} should
+contain a tag that documents the identifier: this is the \tag{element} tag.
+The name attribute of the element tag links the documentation to the
+identifier: the \attr{name} attribute should have as value the fully
+qualified name of the identifier in the unit.
+
+For example, to document the type
+\begin{verbatim}
+Type
+  MyEnum = (meOne,meTwo,meThree);
+\end{verbatim}
+an \tag{element} tag called \var{myenum} should exist:
+\begin{verbatim}
+<element name="myenum">
+</element>
+\end{verbatim}
+But also for each of the three enumerated values an \tag{element} tag should 
+exist:
+\begin{verbatim}
+<element name="myenum.meOne">
+</element>
+<element name="myenum.meTwo">
+</element>
+<element name="myenum.meThree">
+</element>
+\end{verbatim}
+As it can be seen, the names of the identifiers follow a hierarchical
+structure. More about this in the next section.
+
+Now the tags for the types are present, all that should be done is to fill
+it with the actual description.  For this, several tags can be placed inside
+a \tag{element} tag. The most important tag is the \tag{descr} tag. The
+contents of the \tag{descr} tag will be used to describe a type, function, 
+constant or variable:
+
+\begin{verbatim}
+<element name="myenum">
+<descr>
+The MyEnum type is a simple enumeration type which is not
+really useful, except for demonstration purposes.
+</descr>
+</element>
+\end{verbatim}
+
+A second important tag is the \tag{short} tag. It should contain a 
+short description of the identifier, preferably a description that fits on
+one line. The \tag{short} tag will be used in
+various overviews, at the top of a page in the HTML documentation (a
+synopsis) or will be used instead of the \tag{descr} tag if that one 
+is not available. It can also be used in different other cases: For 
+instance the different values of an enumeration type will be laid 
+out in a table, using the \tag{short} description:
+\begin{verbatim}
+<element name="myenum.meOne">
+<short>The first enumeration value</short>
+</element>
+<element name="myenum.meTwo">
+<short>The second enumeration value</short>
+</element>
+<element name="myenum.meThree">
+<short>The third enumeration value</short>
+</element>
+\end{verbatim}
+This will be converted to a table looking more or less like this:
+
+\begin{tabularx}{\textwidth}{lX}
+meOne & The first enumeration value \\
+meTwo & The second enumeration value \\
+meThree & The third enumeration value \\
+\end{tabularx}
+
+For functions and procedures, a list of possible error conditions can be
+documented inside a \tag{errors} tag. This tag is equivalent to the
+\tag{descr} tag, but is placed under a different heading in the generated
+documentation.
+
+Finally, to cross-reference between related functions, types or classes, a
+\tag{seealso} tag is also introduced. This will be used to lay out a series
+of links to related information. This tag can only have sub-tags which are
+\var{link} tags. For more about the \tag{link} tag, see \seetag{link}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% cross-referencing
+\section{Element names and cross-referencing}
+
+\subsection{Element name conventions}
+As mentioned in the previous section, the \var{element} tag's \attr{name}
+attribute is hierarchical. All levels in the hierarchy are denoted by a dot
+(.) in the name attribute. 
+
+As shown in the previous example, for an enumerated type, the various
+enumeration constants can be documented by specifying their name as
+\var{enumname.constname}. For example, given the type
+\begin{verbatim}
+Type
+  MyEnum = (meOne,meTwo,meThree);
+\end{verbatim}
+The various enumeration values can be documented using the element names
+\var{MyEnum.meOne}, \var{MyEnum.meTwo} and \var{MyEnum.meThree}:
+\begin{verbatim}
+<element name="myenum.meOne">
+</element>
+<element name="myenum.meTwo">
+</element>
+<element name="myenum.meThree">
+</element>
+\end{verbatim}
+Note that the casing of the name attribute need not be the same as the
+casing of the declaration.
+
+This hierarchical structure can be used for all non-simple types: 
+\begin{itemize}
+\item Enumeration type values.
+\item Fields in records, objects, classes. For nested record definitions,
+multiple levels are possible in the name.
+\item Methods of classes and objects.
+\item Properties of classes.
+\item Function and procedure arguments. 
+\item Function results. The name is always the function name followed by
+\var{Result}.
+\end{itemize}
+
+\subsection{Cross referencing: the \var{link} tag}
+To refer to another point in the documentation (a related function, class or
+whatever), a \tag{link} tag exists. The \var{link} tag takes as a sole
+attribute a target \attr{id} attribute. The link tag usually encloses a
+piece of text. In the HTML version of the documentation, this piece of text
+will function as a hyperlink. In the latex version, a page number reference
+will be printed. 
+
+The \attr{id} attribute contains the name of an element to which the link
+refers. The name is not case sensitive, but it must be a fully qualified
+name.
+
+An example of the link type would be:
+\begin{verbatim}
+The <link id="MyEnum">MyEnum</link> type is a simple type.
+\end{verbatim}
+
+The link attribute also has a short form: 
+\begin{verbatim}
+The <link id="MyEnum"/> type is a simple type.
+\end{verbatim}
+In the short form, the value of the \attr{id} attribute will be used as the 
+text which will be hyperlinked. This is especially useful in the \tag{seealso}
+tag.
+
+To refer to a type in another unit, the unit name must be prepended to the
+\attr{id} attribute:
+\begin{verbatim}
+<link id="myunit.myenum"/>
+\end{verbatim}
+will link to the \var{myenum} type in a unit named \file{myunit}.
+
+To refer to a node in the documentation of another package, the package name
+should be prepended to the \attr{id} attribute, and it should be prepended
+with the hash symbol (\#):
+\begin{verbatim}
+<link id="#fcl.classes.sofrombeginning"/>
+\end{verbatim}
+will link to the constant \var{sofrombeginning} in the \file{classes} unit
+of the FCL reference documentation. Note that for this to work correctly,
+the contents file which was created when generating the documentation of 
+the type must be imported correctly (see the \var{import} option).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Tag reference
+\section{Tag reference}
+\subsection{Overview}
+The tags can roughly be divided in 2 groups:
+\begin{enumerate}
+\item Documentation structure tags. These are needed for fpdoc to do it's
+work. They determine what elements are documented. See \seet{structtags}
+\item Text structure and formartting tags. These tags indicate blocks of text, such as
+paragraphs, tables, lists and remarks, but also specify formatting: apply formatting (make-up) 
+to the text, or to provide links to other parts of the text. These mostly occur in
+text structure tags. See \seet{formattags}
+\end{enumerate}
+
+\begin{table}[ht]
+\caption{Documentation structure tags}\label{tab:structtags}
+\begin{tabularx}{\textwidth}{lXr}
+Tag & Description & Page \\ \hline
+descr & Element description & \pageref{tag:descr} \\
+element & Identifier documentation & \pageref{tag:element} \\
+errors  & Error section & \pageref{tag:errors} \\
+fpdoc-description & Global tag & \pageref{tag:fpdocdescription} \\
+module & Unit tag & \pageref{tag:module} \\
+package & Package global tab & \pageref{tag:package} \\
+seealso & Cross-reference section & \pageref{tag:seealso} \\
+short & Short description & \pageref{tag:short} \\ \hline
+\end{tabularx}
+\end{table}
+
+\begin{table}[ht]
+\caption{Text formatting tags}\label{tab:formattags}
+\begin{tabularx}{\textwidth}{lXr}
+Tag & Description & Page \\ \hline
+b & Format bold & \pageref{tag:b} \\
+caption & Specify table caption & \pageref{tag:caption} \\
+code & Syntax highlight code & \pageref{tag:code} \\
+dd & definition data & \pageref{tag:dd} \\
+dl & definition list & \pageref{tag:dl} \\
+dt & Definition term & \pageref{tag:dt} \\
+i & format italics & \pageref{tag:i} \\
+li & list element & \pageref{tag:li} \\
+link & Cross-reference & \pageref{tag:link} \\
+ol & numbered list & \pageref{tag:ol} \\
+p & paragraph & \pageref{tag:p} \\
+pre & Preformatted text & \pageref{tag:pre} \\
+remark & remark paragraph & \pageref{tag:remark} \\
+table & Table & \pageref{tag:table} \\
+td & Table cell & \pageref{tag:td} \\
+th & Table header & \pageref{tag:th} \\
+tr & Table row & \pageref{tag:tr} \\
+u & format underlined & \pageref{tag:u} \\
+ul & bulleted list & \pageref{tag:ul} \\
+var & format as variable & \pageref{tag:var} \\ \hline
+\end{tabularx}
+\end{table}
+
+The nodes for formatting a text resemble closely the basic HTML formatting tags with the 
+following exceptions:
+\begin{itemize}
+\item Each opening tag must have a corresponding closing tag.
+\item Tags are case sensitive. 
+\item Tables and paragraphs are at the same level, i.e. a table cannot occur
+inside a paragraph. The same is true for all 'structural' tags such as
+lists, 
+\end{itemize}
+
+Also, if special formatting tags such as a table or lists are inserted, then
+the remaining text must be inside a paragraph tag. This means that the
+following is wrong:
+\begin{verbatim}
+<descr>
+Some beginning text
+<ol>
+<li>A list item</li>
+</ol>
+some ending text
+</descr>
+\end{verbatim}
+Instead, the correct XML should be
+\begin{verbatim}
+<descr>
+<p>Some beginning text</p>
+<ol>
+<li>A list item</li>
+</ol>
+<p>some ending text</p>
+</descr>
+\end{verbatim}
+
+% Tag B
+\subsection{\tag{b} : format bold}
+\label{tag:b}
+This tag will cause the text inside it to be formatted using a bold font.
+
+Example:
+\begin{verbatim}
+Normal text <b>Bold text</b> normal text.
+\end{verbatim}
+will be formatted as:\\
+Normal text \textbf{Bold text} normal text.
+
+See also: \seetag{i}, \seetag{u}.
+
+% Tag caption
+\subsection{\tag{caption} : Specify table caption}
+\label{tag:caption}
+This tag can occur inside a \tag{table} tag and serves to set the table 
+caption.
+
+Example
+\begin{verbatim}
+<table>
+<caption>This caption will end up above the table</caption>
+<th><td>Column 1</td><td>Column 2</td></th>
+</table>
+\end{verbatim}
+
+See also: \seetag{table}
+
+% Tag code
+\subsection{\tag{code} : format as pascal code}
+\label{tag:code}
+The \tag{code} tag serves to insert Pascal code into the text. When possible
+this code will be highlighted in the output. It can be used to put
+highlighted Pascal code in the documentation of some identifier. It can
+occur inside \tag{descr} or \tag{errors} tags.
+
+Note that any text surrounding the \tag{code} tag should be placed in
+paragraph tags \tag{p}.
+
+Example:
+\begin{verbatim}
+<code>
+With Strings do
+  For i:=Count-1 downto 0 do
+    Delete(i);
+</code>
+\end{verbatim}
+
+Seealso: \seetag{pre}, \seetag{p}
+
+% Tag descr
+\subsection{\tag{descr} : Descriptions}
+\label{tag:descr}
+This is the actual documentation tag. The contents of this tag will be 
+written as the documentation of the element. It can contain any mixture of
+text and markup tags. The \tag{descr} tag can only occur inside a
+\tag{element} or \tag{module}.
+
+Example:
+\begin{verbatim}
+<element name="MyEnym">
+<descr>Myenum is a simple enumeration type</descr>
+</element>
+\end{verbatim}
+
+See also: \seetag{element}, \seetag{short}, \seetag{errors}, \seetag{seealso}
+
+% Tag dd
+\subsection{\tag{dd} : definition data.}
+\label{tag:dd}
+The \tag{dd} tag is used to denote the definition of a term in a definition
+list. It can occur only inside a definition list tag (\tag{dl}), after a
+definition term (\tag{dt}) tag. It's usage is identical to the one in HTML.
+
+Example:
+\begin{verbatim}
+<dl>
+<dt>FPC</dt><dd>stands for Free Pascal Compiler.</dd>
+</dl>
+\end{verbatim}
+Will be typeset as
+\begin{description}
+\item[FPC] stands for Free Pascal Compiler.
+\end{description}
+
+See also: \seetag{dl}, \seetag{dt}, \seetag{ol}, \seetag{ul}
+
+% Tag dl
+\subsection{\tag{dl} : definition list.}
+\label{tag:dl}
+Definition lists are meant to type a set of terms together with their
+explanation. It's usage is identical to the one in HTML, with the exception
+that it cannot occur inside ordinary text: surrounding text should always be
+enclosed in paragraph tags.
+
+Example:
+\begin{verbatim}
+<dl>
+<dt>meOne</dt><dd>First element of the enumeration type.</dd>
+<dt>meTwo</dt><dd>Second element of the enumeration type.</dd>
+<dt>meThree</dt><dd>Thir element of the enumeration type.</dd>
+</dl>
+\end{verbatim}
+Will be typeset as
+\begin{description}
+\item[meOne] First element of the enumeration type.
+\item[meTwo] Second element of the enumeration type.
+\item[meThree] Third element of the enumeration type.
+\end{description}
+
+See also: \seetag{dt}, \seetag{dd}, \seetag{ol}, \seetag{ul}
+
+% Tag  dt
+\subsection{\tag{dt} : definition term.}
+\label{tag:dt}
+The \tag{dt} tag is used in definition lists to enclose the term for which a
+definition is presented. It's usage is identical to the usage in HTML.
+
+Example:
+\begin{verbatim}
+<dl>
+<dt>FPC</dt><dd>stands for Free Pascal Compiler.</dd>
+</dl>
+\end{verbatim}
+Will be typeset as
+\begin{description}
+\item[FPC] stands for Free Pascal Compiler.
+\end{description}
+
+See also: \seetag{dl}, \seetag{dd}, \seetag{ol}, \seetag{ul}
+
+
+% Tag element
+\subsection{\tag{element} : Identifier documentation}
+\label{tag:element}
+The \tag{element} contains the documentation for an identifier in a unit. It
+should occur inside a \var{module} tag. It can contain 4 tags:
+\begin{description}
+\item[short] For a one-line description of the identifier. Is used as a
+header or is used in overviews of constants, types, variables or classes.
+\item[descr] Contains the actual description of the identifier.
+\item[errors] For functions an procedures this can be used to describe error
+conditions. It will be put in a separate section below the description
+section.
+\item[seealso] Used to refer to other nodes. will be typeset in a separate
+section.
+\end{description}
+
+The \tag{element} tag should have at least the \attr{name} attribute, it 
+is used to link the element node to the actual identifier in the Pascal unit.
+Other attributes may be added in future.
+
+Example:
+\begin{verbatim}
+<element name="MyEnym">
+<descr>Myenum is a simple enumeration type</descr>
+</element>
+\end{verbatim}
+
+See also: \seetag{descr}, \seetag{short}, \seetag{errors}, \seetag{seealso}
+
+% Tag errors
+\subsection{\tag{errors} : Error section.}
+\label{tag:errors}
+The \tag{errors} tag is used to document any errors that can occur when
+calling a function or procedure. it is placed in a different section in the
+generated documentation. It occurs inside a \tag{element} tag, at the same
+level as a \tag{descr} or \tag{short} tag. It's contents can be any
+text or formatting tag.
+
+Example:
+\begin{verbatim}
+<element name="MyDangerousFunction">
+<descr>MyDangerousFunction is a dangerous function</descr>
+<errors>When MyDangerousFunction fails, all is lost</errors>
+</element>
+\end{verbatim}
+
+See also: \seetag{descr}, \seetag{short}, \seetag{element}, \seetag{seealso}
+
+% Tag fpdoc-description
+\subsection{\tag{fpdoc-description} : Global tag}
+\label{tag:fpdocdescription}
+The \tag{fpdoc-description} tag is the topmost tag in a description file. It
+contains a series of \tag{package} tags, one for each package that is
+described in the file.
+
+See also: \seetag{package}
+
+% Tag i
+\subsection{\tag{i} : Format italics}
+\label{tag:i}
+The \tag{i} tag will cause its contents to be typeset in italics. It can
+occur mixed with any text.
+
+Example:
+\begin{verbatim}
+Normal text <i>italic text</i> normal text.
+\end{verbatim}
+will be formatted as:\\
+Normal text \textit{italic text} normal text.
+
+See also: \seetag{b}, \seetag{u}
+
+% Tag li
+\subsection{\tag{li} : list element}
+\label{tag:li}
+The tag \tag{li} denotes an element in a \tag{ol} or \tag{ul} list.
+The usage is the same as for it's HTML counterpart: It can occur 
+only inside one of the  \tag{ol} or \tag{ul} list tags.
+It's contents may be arbitrary text and formatting tags, contrary to HTML
+tags, the \tag{li} tag always must have a closing tag. Note that it cannot be used in a
+definition list (\seetag{dl}).
+
+Example:
+\begin{verbatim}
+<ul>
+<li>First item in the list</li>
+<li>Second item in the list</li>
+</ul>
+\end{verbatim}
+Will be typeset as
+\begin{itemize}
+\item First item in the list.
+\item Second item in the list.
+\end{itemize}
+
+See also: \seetag{ol}, \seetag{ul}.
+
+% Tag link
+\subsection{\tag{link} : Cross-reference}
+\label{tag:link}
+The \tag{link} tag is used to insert a reference to an element inside some
+piece of text or inside the \tag{seealso} section. It is similar in
+functionality to the 
+\begin{verbatim}
+<A HREF="SomeAnchor">some linked text</A>
+\end{verbatim}
+construct in HTML.
+
+The mandatory \attr{id} attribute of the \tag{link} tag should have the 
+name of an element tag in it. This name is not case sensitive. \fpdoc
+will issue a warning if it cannot find a matching name. It will look for
+matching names in the current file, and in all content files that have been
+specified with the \var{import} command-line option.
+
+The link tag can exist in 2 forms: one with separate closing tag,
+surrounding a piece of text, one without separate closing tag. If a piece of
+text is surrounded by the link tag, then the text will be converted to a
+hyperlink in the HTML documentation. If there is no surrounded text, then
+the value of the \attr{id} attribute will be used as the text. This means
+that
+\begin{verbatim}
+<link id="TStream">TStream</link>
+\end{verbatim}
+and
+\begin{verbatim}
+<link id="TStream"/>
+\end{verbatim}
+are completely equivalent.
+
+Example:
+\begin{verbatim}
+The <link id="TStringlist">stringlist</link> class is a descendent of the
+<link id="TStrings"/> class.
+\end{verbatim}
+
+See also: \seetag{element}, the \var{import} option (\seesu{import}).
+
+% Tag module 
+\subsection{\tag{module} : Unit reference}
+\label{tag:module}
+The \tag{module} tag encloses all \tag{element} tags for a unit. It can
+contain only \tag{element} tags for all identifiers in the unit and 
+a \tag{descr} tag describing the unit itself. The \tag{module} tag should
+occur inside a \tag{package} tag.
+
+The \attr{name} attribute should have as a value the name of the unit which
+is described by the module. This name is not case sensitive.
+
+Example:
+\begin{verbatim}
+<module name="classes">
+<descr>
+The classes unit contains basic class definitions for the FCL.
+</descr>
+</module>
+\end{verbatim}
+
+See also: \seetag{package}, \seetag{descr}, \seetag{element}
+
+% Tag ol
+\subsection{\tag{ol} : Numbered list.}
+\label{tag:ol}
+The \tag{ol} tag starts a numbered list. It can contain only \seetag{li}
+tags, which denote the various elements in the list. Each item will be
+preceded by a number. The \tag{ol} tag can
+occur inside a text, but surrounding text should always be enclosed in a
+\seetag{p} paragraph tag, i.e. an \tag{ol} tag should occur always at the
+same level as a \tag{p} tag.
+
+Example:
+\begin{verbatim}
+<p> some text before</p>
+<ol>
+<li>First item in the list</li>
+<li>Second item in the list</li>
+</ol>
+\end{verbatim}
+Will be typeset as:
+
+some text before
+\begin{enumerate}
+\item First item in the list.
+\item Second item in the list.
+\end{enumerate}
+
+See also: \seetag{li}, \seetag{ul}.
+
+
+% Tag paragraph
+\subsection{\tag{p} : Paragraph}
+\label{tag:p}
+The \tag{p} tag is the paragraph tag. Every description text should be 
+enclosed in a \tag{p} tag. Only when there is only one paragraph (and no
+lists or tables or remarks) in a description node, then the \tag{p} tag  may
+be skipped.
+
+Note that if a description node contains a \tag{table}, \tag{pre}, \tag{code}
+or any list tag, then the text surrounding these tags {\em must} be  put 
+inside a \tag{p} paragraph tag. This is different from the behaviour in HTML.
+
+The paragraph tag must always have an opening tag and a closing tag, unlike
+html where only the opening tag may be present.
+
+Example:
+\begin{verbatim}
+<descr>
+This is a paragraph which need not be surrounded by paragraph tags.
+</descr>
+\end{verbatim}
+\begin{verbatim}
+<descr>
+<p>
+This is the first paragraph.
+</p>
+<p>
+This is the second paragraph.
+</p>
+</descr>
+\end{verbatim}
+
+See also: \seetag{table}, \seetag{dl}, \seetag{remark},\seetag{code},
+\seetag{ol},\seetag{ul},\seetag{ol}
+
+% Tag package
+\subsection{\tag{package} : Package reference}
+\label{tag:package}
+The \tag{package} tag indicates the package for which the description file
+contains documentation. A package is a collection of units which are
+logically grouped together (for a library, program, component suites). The
+\attr{name} attribute of the \tag{package} tag will be used to select the
+package node in the description file: Only the \tag{package} node with name as
+specified by the \var{package} command-line option will be used when
+generating documentation. All other package nodes will be ignored.
+
+The \tag{package} node must always reside in a \tag{fpdoc-description} node.
+It can contain a \tag{descr} node, and various \tag{module} nodes, one node
+per unit in the package.
+
+See also: \seetag{fpdocdescription}, \seetag{module}, \seetag{descr}
+
+% Tag pre
+\subsection{\tag{pre} : Insert text as-is}
+\label{tag:pre}
+The \tag{pre} tag can be used to insert arbitrary text in the documentation.
+The text will not be formatted in any way, and will be displayed as it is
+encountered in the description node. It is functionally equivalent to the
+\tag{pre} tag in HTML.
+
+Note that if there is text surrounding the \tag{pre} tag, it should be placed
+inside a \tag{p} paragraph tag.
+
+Example:
+\begin{verbatim}
+<pre>
+This is some text.
+  This is some more text
+
+    And yet more text...
+</pre>
+\end{verbatim}
+This will be typeset as:
+\begin{verbatim}
+This is some text.
+  This is some more text
+
+    And yet more text...
+\end{verbatim}
+
+See also: \seetag{code}, \seetag{p}
+
+% Tag remark
+\subsection{\tag{remark} : format as remark}
+\label{tag:remark}
+A \tag{remark} tag can be used to make a paragraph stand out. The
+\tag{remark} is equivalent to the \tag{p} tag, but it's contents is
+formatted in a way that makes it stand out from the rest of the text.
+
+Note that any text before or after the \tag{remark} tag must be enclosed in
+paragraph (\tag{p}) tags.
+
+Example:
+\begin{verbatim}
+<p>Normal text.</p>
+<remark>
+This text will stand out.
+<example>
+<p>Again normal text.</p>
+\end{verbatim}
+Will be formatted as
+
+Normal text.
+\begin{remark}
+This text will stand out.
+\end{remark}
+Again normal text.
+
+See also: \seetag{p}, \seetag{code}, \seetag{pre}
+
+% Tag seealso
+\subsection{\tag{seealso} : Cross-reference section}
+\label{tag:seealso}
+The \tag{seealso} section can occur inside any \tag{element} tag, and will
+be used to create a list of cross-references. The contents of the
+\tag{seealso} tag is a list of \tag{link} tags. No other text is allowed
+inside this tag. Note that both the long and short form if the link tag may
+be used.
+
+Example:
+\begin{verbatim}
+<seealso>
+<link id="TStrings"/>
+<link id="TStringList.Create">Create</link>
+</seealso>
+\end{verbatim}
+
+See also: \seetag{link}, \seetag{element}
+
+% Tag short
+\subsection{\tag{short} : Short description}
+\label{tag:short}
+The \var{short} description is used to give a short description of an
+identifier. If possible, the description should fit on a single line of
+text. The contents of this tag will be used for the following purposes:
+\begin{itemize}
+\item Used as the synopsis on a page that describes an identifier.
+\item Used in overviews of constants, types, variables, record fields, 
+functions and procedures, classes, and for method and property listings of classes.
+\item Replaces the \tag{descr} tag in an \tag{element} if no \tag{descr} tag is present.
+\item In the description of an enumerated type, the enumeration values are
+typeset in a table, each row containing the name of the value and the short
+description.
+\item In the description of a function or procedure that accepts arguments,
+the arguments are followed by their short description.
+\item In the declaration of a class or record, each method, field or property
+is followed by the short description.
+\end{itemize}
+
+Example:
+\begin{verbatim}
+<element name="MyEnum.meOne">
+<short>First element of MyEnum</short>
+</element>
+\end{verbatim}
+
+See also: \seetag{element}, \seetag{descr}
+
+% Tag table
+\subsection{\tag{table} : Table start}
+\label{tag:table}
+The \var{table} tag starts a table, as in HTML. A table can contain
+\tag{tr} (table row),  \tag{th} (table header row) or \tag{caption} tags.
+Any text surrounding the table must be enclosed in paragraph tags (\tag{p}).
+
+Example:
+\begin{verbatim}
+<table>
+<caption>
+<var>TALignment</var> values and their meanings.
+</caption>
+<th><td>Value</td><td>Meaning</td></th>
+<tr>
+  <td><var>taLeftJustify</var></td>
+  <td>Text is displayed aligned to the left.</td>
+</tr>
+<tr>
+  <td><var>taRightJustify</var></td>
+  <td>Text is displayed aligned to the right</td>
+</tr>
+<tr>
+  <td><var>taCenter</var></td>
+  <td>Text is displayed centred.</td>
+</tr>
+</table>
+\end{verbatim}
+Will be formatted approximately as follows:
+
+\begin{tabularx}{\textwidth}{lX}
+Value & Meaning \\ \hline
+\var{taLeftJustify} & Text is displayed aligned to the left. \\
+\var{taRightJustify} & Text is displayed aligned to the right \\
+\var{taCenter} & Text is displayed centred.
+\end{tabularx}
+
+See also: \seetag{th}, \seetag{caption}, \seetag{tr}, \seetag{p}
+
+% Tag td
+\subsection{\tag{td} : Table cell}
+\label{tag:td}
+The \tag{td} tag is used to denote one cell in a table. It occurs
+inside a \tag{tr} or \tag{th} tag, and can contain any text and formatting
+tags.
+
+Example:
+\begin{verbatim}
+<table>
+<tr><td>Cell (1,1)</td><td>Cell (2,1)</td></tr>
+<tr><td>Cell (1,2)</td><td>Cell (2,2)</td></tr>
+</table>
+\end{verbatim}
+Will be formatted approximately as
+
+\begin{tabular}{ll}
+Cell (1,1) & Cell (2,1) \\
+Cell (1,2) & Cell (2,2)
+\end{tabular}
+
+See also: \seetag{table}, \seetag{th}, \seetag{tr}
+
+% Tag th
+\subsection{\tag{th} : Table header}
+\label{tag:th}
+The \var{th} table header tag is used to denote the first row(s) of a table: 
+It (they) will be made up differently from the other rows in the table.
+Exactly how it is made up depends on the format. In printed documentation
+(latex) a line will be drawn under the row. In HTML, the font and background
+may be formatted differently.
+
+The \tag{th} tag can only occur inside a \tag{table} tag, and can contain
+only \tag{td} tags.
+
+Example:
+\begin{verbatim}
+<table>
+<th><td>Cell (1,1)</td><td>Cell (2,1)</td></th>
+<tr><td>Cell (1,2)</td><td>Cell (2,2)</td></tr>
+</table>
+\end{verbatim}
+Will be formatted approximately as
+
+\begin{tabular}{ll}
+Cell (1,1) & Cell (2,1) \\ \hline
+Cell (1,2) & Cell (2,2)
+\end{tabular}
+ 
+See also: \seetag{tr}, \seetag{table}
+
+% Tag tr
+\subsection{\tag{tr} : table row}
+\label{tag:tr}
+The \tag{tr} tag denotes a row in a table. It works the same as in HTML.
+It can occur only in a \tag{table} tag, and should contain only \tag{td}
+table data tags. 
+
+Example:
+\begin{verbatim}
+<table>
+<tr><td>Cell (1,1)</td><td>Cell (2,1)</td></tr>
+<tr><td>Cell (1,2)</td><td>Cell (2,2)</td></tr>
+</table>
+\end{verbatim}
+Will be formatted approximately as
+
+\begin{tabular}{ll}
+Cell (1,1) & Cell (2,1) \\
+Cell (1,2) & Cell (2,2)
+\end{tabular}
+
+See also: \seetag{table}, \seetag{th}, \seetag{td}
+
+% Tag u
+\subsection{\tag{u} : Format underlined}
+\label{tag:u}
+
+Example:
+\begin{verbatim}
+Normal text <u>underlined text</u> normal text.
+\end{verbatim}
+will be formatted as:\\
+Normal text \underline{underlined text} normal text.
+
+See also: \seetag{i}, \seetag{b}.
+
+% Tag ul
+\subsection{\tag{ul} : bulleted list}
+\label{tag:ul}
+The \var{ul} tag starts a bulleted list. This works as under HTML, with the
+exception that any text surrounding the list must be enclosed in paragraph
+tags (\tag{p}). The list elements should be enclosed in \tag{li} tags.
+
+Example:
+\begin{verbatim}
+<p> some text before</p>
+<ol>
+<li>First item in the list</li>
+<li>Second item in the list</li>
+</ol>
+\end{verbatim}
+Will be typeset as:
+
+some text before
+\begin{itemize}
+\item First item in the list.
+\item Second item in the list.
+\end{itemize}
+
+See also: \seetag{li}, \seetag{ol}.
+
+% Tag var
+\subsection{\tag{var} : variable}
+\label{tag:var}
+The \tag{var} tag is used to mark a piece of text as a variable (or, more
+general, as an identifier). It will be typeset differently from the 
+surrounding text. Exactly how this is done depends on the output format.
+
+Example:
+\begin{verbatim}
+The <var>Items</var> property gives indexed access to...
+\end{verbatim}
+Will be typeset as
+
+The \var{Items} property gives indexed access to...
+
+See also: \seetag{b}, \seetag{u}, \seetag{i}, \seetag{code}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Generated output files.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{Generated output files.}
+\label{ch:outputfiles}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% HTML output
+\section{HTML output}
+The HTML output consists of the following files, per unit:
+
+\begin{enumerate}
+\item A general unit description with the contents of the module's
+ \tag{descr} tag. The \var{uses} clause is documented here as well. 
+All units in the \var{uses} clause together with their \tag{short}
+ description tags are typeset in a table.
+\item A listing of all constants in the unit.
+\item A listing of all types in the unit (except classes).
+\item A listing of all variables in the unit.
+\item A listing of all functions/procedures in the unit.
+\item A listing of all classes in the unit.
+\end{enumerate}
+All these overviews are hyperlinked to pages which contain the documentation
+of each identifier. Each page starts with the name of the identifier,
+plus a synopsis (made from the \tag{short} tag's contents).  After that
+follows the declaration, and the description. The description is filled with
+the \tag{descr} node of the identifiers \tag{element} tag.
+
+If an \var{errors} tag was present, an 'Errors' section follows the
+description. Similarly, if there is a \tag{seealso} tag, a 'See also'
+section with cross-reference links is made.
+
+For classes, the declaration contains hyperlinks to separate pages which 
+document all the members of the class. Each member in the declaration is 
+followed by the \tag{short} tag of the member's \tag{element} tag, if one
+exists. As an extra, the class hierarchy is given, plus links to pop-up pages
+(if JavaScript is available, otherwise they are normal links) which contain
+alphabetical or hierarchical listings of the methods, fields or properties
+of the class.
+
+For functions and procedures, the declaration will be typeset in such a way
+that all function arguments (if they are present) are in tabular format, 
+followed by the short description of the argument. If it concerns a
+function, and a result element exists, the result description will be
+provided in a separate section, before the actual description.
+
+The declaration of an enumerated type will be laid out in a table, with the
+enumeration value at the left, and the short description node of the value's 
+element.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Latex output
+\section{Latex output}
+
+The latex output is in one big file with the name of the package as
+specified on the command line. in this file, one chapter is made per 
+unit.
+
+Per unit the following sections are made:
+
+\begin{enumerate}
+\item A section with all constants.
+\item A section with all types.
+\item A section with all variables.
+\item A section with all functions and procedures.
+\item A section per declared class.
+\end{enumerate}
+
+For the constants, types and variables, the declaration is given, followed
+by the \tag{descr} node of the element corresponding to the identifier.
+All other nodes are ignored. 
+
+For functions and procedures, a subsection is made per procedure or
+function. This subsection consists of a list with the following entries:
+\begin{description}
+\item[Synopsis] filled with the contents of the \tag{short} tag.
+\item[Declaration] Filled with the declaration of the function.
+\item[Arguments] A tabular description of all arguments, if \tag{short} tags
+are found for them.
+\item[Description] Description of the function. Filled with the contents of
+the \tag{descr} tag.
+\item[Errors] Description of any error conditions. Filled with the contents
+of the \tag{errors} tag.
+\item[See Also] Cross-references to other functions. Filled with the
+contents of the \tag{seealso} tag.
+\end{description}
+
+For classes, a subsection is made with an overview of implemented methods.
+Then a subsection is presented with available properties. 
+
+Then follows a subsection per method. These are formatted as a function, with an
+additional \textbf{Visibility} list element, giving the visibility of the
+function.
+
+After the methods, a list of properties is given , formatted as a method,
+with an additional \var{Access} list element, specifying whether the
+property is read/write or not.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% End of file
+\end{document}