pax_global_header 0000666 0000000 0000000 00000000064 12305625535 0014520 g ustar 00root root 0000000 0000000 52 comment=1e43dedd0027c1c371489a55440def09802990c6
cduce-0.6.0/ 0000775 0000000 0000000 00000000000 12305625535 0012606 5 ustar 00root root 0000000 0000000 cduce-0.6.0/.gitmodules 0000664 0000000 0000000 00000000114 12305625535 0014757 0 ustar 00root root 0000000 0000000 [submodule "ocaml"]
path = ocaml
url = https://github.com/ocaml/ocaml.git
cduce-0.6.0/AUTHORS 0000664 0000000 0000000 00000000543 12305625535 0013660 0 ustar 00root root 0000000 0000000 Main developer:
Alain Frisch
Research project leaders, documentation:
Alain Frisch
Giuseppe Castagna
Véronique Benzaken
Code contribution:
Cédric Miachon (author and maintainer of the CQL subset)
Julien Demouth (original implementation of the OCaml/CDuce interface)
Stefano Zacchiroli (original implementation of the XML Schema support)
cduce-0.6.0/CHANGES 0000664 0000000 0000000 00000025420 12305625535 0013604 0 ustar 00root root 0000000 0000000 0.5.5
* Added load_xml_subst and print_xml_subst for namespaces substitution.
(necessary for Web Services with OcCDuce and CDuce_WS).
0.5.4
* Added Services for Ocsigen.
* Fixed a bug with wildcard for namespaces (ns:*)
* Corrected whitespace normalization in atomic types before validation
* Fixed 2 bugs in the cduce-ocaml interface
* Changed packaging script since it forgot dtd2cduce.ml
0.5.3
* Port to OCaml 3.11 (courtesy of Richard Jones)
* fixed to work with ocaml-curl library >= 0.5
- Tools
* Fixed dtd2cduce bug when handling of "FIXED" attributes
* Fixed bug in building: PXP was not build if GCI not present
0.5.2_1
* Fixed packaging error
0.5.2
- Tools
* New Mac OSX build
* bugfix in the build. New cgi package optional detection
and now the netcgi1 is directly used (fix distributions
that provide only netcgi1 and not cgi).
0.5.1
- Tools:
* New windows binary package
- Implementation:
* support for cdata sections
* automatic mapping of ocaml data types to cduce types
0.5.0
* Port to OCaml 3.10, with the help of Nicolas Pouillard
0.4.2
- Language:
* Added int_of_char
- Bug fix:
* "match 1 with (x := `nil) -> x" raised an assert failure
0.4.1
- Tools:
* Error message when using --mlstub without the built-in OCaml interface
* Improvements to the type pretty-printer
* "include" uses the -I options
- Language:
* New Caml_int builtin type
* The // construction no longer stops at the first matched subtree
on each branch
* New "dump_xml" and "dump_xml_utf8", equivalent to the composition
of print and print_xml, but more efficient
- Implementation:
* New subtyping algorithm
* Small improvement to the pattern matching compiler
* Improve type-checking time for map
* Improve type-checking of record expressions
* Don't display warnings for unused branches in ghost (generated) pattern
matching
- Bug fix:
* "eval" can now be called several times and use the toplevel environment
* use "open_out_bin" (needed for Cygwin installation)
* "open" allowed as tag name
* exceptions raised by the expat parser and by the dump_to_file
primitives are now catchable
* work-around the double close bug in OCaml
0.4.0pl1
- Packaging bug
0.4.0
- Adapted to OCaml 3.09.
- To build the OCaml/CDuce interface, OCaml sources are now needed.
0.3.92
- Tools:
* Build and install dtd2cduce when PXP is available.
* Display of location for errors and warnings compatible with OCaml.
- Language:
* Better error messages for xtransform.
- Bug fix:
* Forgot PLIST.godi in the package.
0.3.91
- Tools:
* Get rid of cdo2ml and mlcduce_wrapper. Now included in cduce.
- Bug fix:
* Internal uid collision when using OCaml externals.
* Makes "String.length" works (String used to resolve to the CDuce type).
0.3.9
- Language:
* Added split_atom, make_atom. Removed atom_of.
* Added char_of_int built_in function.
* Now int_of also accepts octal binary and hexadecimals.
* The field access also works for XML element attributes.
* More catchable exceptions (for load_xml, load_file, etc).
* namespaces, schemas, "using" identifiers are now exported.
* "open" statement.
- Implementation:
* More efficient implementation of records at runtime.
* Clean-up of the internal representation.
* The XML Schemas are now parsed only at compile time.
* The automata for pattern matching are now produced at compile time.
- Tools:
* The functionality of cdo2ml is now assured by cduce itself, with
the --mlstub option.
* Remove the --dump option (which was deprecated).
* Remove support for sessions in the web prototype.
- Bug fixes:
* Correct handling of external references with expat.
* Installation problem under some BSD (using "install -c").
0.3.2
* Bug fix in configure
0.3.1
- Bug fix:
* configure must not require pxp
* inclusion of external entities with expat
* META.in, cduce_mktop missing in package
* several bugfixes for XML Schema
* Adapt to ocaml-expat 0.9.1
* don't build cdo2ml, mlcduce_wrapper when ocaml iface not available
- Language:
* Can now preserve namespaces when parsing XML or when creating XML elements
* "or" is now equivalent to ||
0.3.0
- Language:
* Warning for capture variables and projections that always return the empty
sequence.
* Major rewrite of the support for XML Schema
* removed print_schema directive
* removed the "kind" selector (e.g. S # t as element)
* include,import implemented
* support wildcards any,anyAttrivbute
* support xsi:nil
* support xsd:decimal,xsd:float
* many bug fixes
* Removed the syntax "external {...}", replaced with
"unit.val with { ty1 ty2 ... }".
* Removed the syntax H:val, replaced with H.val.
* Removed the syntax S#t, replaced with S.t.
* Overloaded the dot (record field acces, CDuce, OCaml, Schema units).
A dot in an identifier must now be escaped with a backslash, e.g. x\.y
* Identifiers (for types, values) are now qualified names.
* float_of: String -> Float
* Syntax modifications for records and attributes:
- ".." to denote open record types/patterns:
open record: { l1=t1 l2=t2 .. }
closed record: { l1=t1 l2=t2 }
- the ";" between fields is optional even for records
(used to be optional only for attributes)
* Keywords are now allowed as type names
* Concatenation @ allowed in types
* Record concatenation + allowed in types
* Changed "string://" URL-pseudo schema to "string:"
* Better resolution of external entities for PXP and expat
- Tools:
* A new tool cduce_mktop produces customized CDuce toplevels with embedded
OCaml externals.
* Removed the validate tool.
* Don't build dtd2cduce by default (it requires PXP). An online
version is available at http://www.cduce.org/dtd2cduce.html
- Implementation:
* Various bug fixes.
* More efficient hash-consing of types.
* improved #print_type (does not use the abbreviation for the printed type).
- Distribution:
* MIT license.
* CDuce can be built without support for PXP.
- CQL:
* Rewrote the optimization (pushing projections).
* The syntax for "where" clause is now simply an "and"-separated
list of conditions ("or" is no longer supported).
* Better types for "min","max","distinct_values" operators.
0.2.2
- Language:
* Runtime type-check: (e :? t) raises an exception when e doesn't
have type t; the exception is an explanation of why this is not the case.
(The actual message may change in the future.)
* Better return type for load_xml, defined as:
AnyXml=<(Atom) (Record)>[ (AnyXml|Char)* ]
* New style for comments: /* ... */
Simple and double quotes within these comments are not handled
specially. Moreover, these comments cannot be nested.
The new style should be used for textual comments (which can include
the simple quote); the old style is better for ignoring pieces of code.
* Pattern guard /p in regexps to match the current tail. This can be used
for setting "markers" without capturing anything, e.g.:
[ (/(x:=1) ...) | (/(x:=2) ...) ]
Back to the old semantics for default value patterns in regexps
(they do capture an element).
* New syntax {...; l = p else p'; ... }. p' is applied
to the whole matched record when p does not match (or when
the field is missing). Equivalent to:
{ ...; l = p; ...} | ({...;...} & p')
* Punning in record/attribute expressions and patterns.
{ x; y } is a shorthand for {x=x;y=y}.
* New syntax for R**n in regular expressions, equivalent
to R...R (n times), where n > 0.
* Interval arithmetic for the * operator.
* Warning for potential division by 0.
* New "system", "exit", "getenv" built-in functions.
- Toplevel, interpreter, compiler:
* New #silent, #verbose directives.
* New --script option.
* Removed the warning "no caml interface".
- Compilation:
* Better compilation of sequence capture variables.
Now, [ ... x::Any* ] is as efficient as [ ... ; x ]. Can also be written
[ ... /x _* ]. The [ ... ; ... ] syntax is no longer necessary
and might be deprecated.
- Bug fixes, including:
* Bug fixes in configure/Makefile for Cygwin.
* Bug fix for the compilation of complex patterns with records.
* Fixed a little bit support for XML Schema, but still largely broken.
* Fix --stdin.
* Bug fix in print_xml (do not create a namespace decl for "xml:").
- Distribution:
* apps-cduce-cvs GODI package is updatable.
* The release tarball does not contain the CDuce website, only
the HTML documentation (memento, tutorial, manual).
0.2.1
- string:// scheme for load_xml and others
- code updated to OCaml 3.08.1, PXP 1.1.95
- NOTE: support for namespaces in XML Schema may be broken
0.2.0
- OCaml/CDuce interface.
- Language:
* Support for URLs in load_xml, load_html, load_file, and schemas:
e.g. you can write `` load_html "http://www.cduce.org/" ''
(need either the ocurl package or the netclient package).
* More advanced (and documented) support for XML Schemas.
* Preliminary integration of CQL query language that is:
select e from p1 in e1, ... ,pn in en where e'.
* Allow structured constants in default value patterns (p := c).
* Default value patterns in regexps don't consume an element.
* Logical operators &&, ||, and not.
* New syntax for currified functions
fun (p1 : t1)...(pn : tn) : t = ...
- Incompatible changes:
* argv is now an operator of type [] -> [ String* ].
* The --dump, --load, --save options are deprecated.
* Changes to the command line. "--pxp" is replaced with "--no expat".
- Implementation:
* Code upgraded to Ocaml 3.07.
* Major cleaning in progress.
* Added internal support for abstract data types.
* Using ulex instead of wlex.
* Sources can now be in utf8.
* Separate compilation.
* Lazy implementation of @.
- Other:
* Added configure script.
* Various Makefile improvements.
- Bug fixes:
* Bug fixes in the parser. Tuples are now ok in regexps.
0.1.1
* Various bug fixes (expat might now work)
* Sequencing operator e1;e2 (equivalent to: let [] = e1 in e2)
* Encoded references
0.1.0
* Support for XML Namespaces
* Better support for expat; clean Makefile
* Get rid of ;; and let fun in examples
* Optional ; for record in attribute position (values and types/patterns)
* Split --dump into --load and --save
* Better handling of strings (specific node in AST)
* Map, transform: tail-recursive implementation
* Preliminary support for XML Schema
* Various bug fixes
0.0.91
* Second alpha release
* Bug fixes and syntax changes (e.g. making "fun" optional in "let fun")
* Experimenting with expat support (see expat/README)
0.0.9
* First public release (alpha release)
cduce-0.6.0/INSTALL 0000664 0000000 0000000 00000014752 12305625535 0013650 0 ustar 00root root 0000000 0000000 Installation Notes for CDuce
============================
CDuce is written in the OCaml programming language. It has been
successfully compiled under Intel Linux, Mac OSX, SunOS 5.7, FreeBSD 4.7.
and Windows XP.
(See INSTALL.WIN32 for installation under Windows)
------------------------------------------------------------------------------
Prerequisites
------------------------------------------------------------------------------
An easy way to get a system ready to compile CDuce is to use
the GODI distribution:
http://www.ocaml-programming.de/godi/
It includes all the mandatory and optional packages listed below,
and also the special modules needed to build the OCaml/CDuce interface.
Mandatory packages:
-------------------
Before compiling CDuce, you need to install recent releases of the
following packages:
ocaml >= 3.10
http://caml.inria.fr/ocaml/distrib.html
findlib >= 1.0.3
http://www.ocaml-programming.de/packages
ulex >= 1.0
http://www.cduce.org/download.html
pcre-ocaml >= 5.13.0
http://ocaml.info/home/ocaml_sources.html#toc16
ocamlnet >= 0.98
http://www.ocaml-programming.de/packages
Additional optional packages:
-----------------------------
* You'll probably want to build CDuce with an XML parser. You will need one of:
pxp >= 1.1.95
http://www.ocaml-programming.de/packages/documentation/pxp/index_dev.html
ocaml-expat >= 0.9.1
http://home.wanadoo.nl/maas/ocaml/
* CDuce can use one the the ocurl and netclient library to fetch external
URLs. You will need one of:
ocurl >= 0.15
http://sourceforge.net/projects/ocurl/
netclient >= 0.90.1
http://www.ocaml-programming.de/programming/netclient.html
netclient support only the http protocol.
curl supports in addition https, ftp, and other protocols.
Important notes:
----------------
- pcre-ocaml: you may also need to install the PCRE library
from http://www.pcre.org/ (use version >=4.4)
[red-hat users: pcre (rawhide) packages may not work with the
latest pcre-ocaml versions, use tarballs]
In this case, configure it with the --enable-utf8 option.
>= 5.03 recommended but previous versions may work
- PXP:
It is enough to build support for UTF8 and ISO-8859-1 ocamllex-lexers:
./configure -without-wlex -without-wlex-compat -lexlist utf8,iso88591
You can also build pxp with wlex support (more compact code). This
can be done by installing wlex runtime support library *before* pxp
http://www.eleves.ens.fr/home/frisch/soft.html#wlex
and build pxp -with-wlex*. When building CDuce you still have the
choice whether to use wlex or ocamllex (to choose wlex,
do ./configure --with-pxp_wlex or set PXP_WLEX=true in Makefile.conf).
- ocurl:
you may also need to install libcurl (http://curl.haxx.se/libcurl/)
- ocaml-expat:
you may also need to install libexpat (http://expat.sourceforge.net/)
------------------------------------------------------------------------------
Compilation
------------------------------------------------------------------------------
There is a configure script. It will check for the presence of
mandatory packages, and detect automatically optional ones. It will
also set installation directories. Running the script produces a
Makefile.conf file. You can get usage information about the script
with: ./configure --help
Alternatively, it is also possible to copy Makefile.conf.template to
Makefile.conf and modify it by hand.
The usual command line for configuring and building CDuce:
./configure && make all && make install
To see all the configuration options:
./configure --help
You need a GNU Make (or equivalent). The Makefile defines the following goals:
- make help
print a summary of what follows
- make all
build binaries and libraries (does not build dtd2cduce)
- make cduce
compiles the CDuce command line interpreter
- make dtd2cduce
compiles the dtd2cduce tools (converts DTD to CDuce types).
The PXP package must be available to build dtd2cduce.
If you cannot build dtd2cduce locally, you can use on online
version available at this URL:
http://www.cduce.org/dtd2cduce.html
- make doc
compiles in the subdirectory web/doc the HTML documentation for CDuce
- make all
- make install
installs binaries into $(BINDIR), manpages into $(MANDIR)/man1,
and registers the cduce_lib library with findlib.
- make clean
back to the starting point
- make uninstall
removes installed files
------------------------------------------------------------------------------
Building the CDuce/OCaml interface
------------------------------------------------------------------------------
If you want to build the OCaml/CDuce interface, you need a copy
of the OCaml source tree matching your current OCaml version.
You must pass the location of this tree to the configure script:
./configure --mliface=$HOME/ocaml-3.09
------------------------------------------------------------------------------
Note on XML parsers
------------------------------------------------------------------------------
When CDuce is built with support for both expat and PXP, it uses by default
expat to parse XML files. You can still use PXP by adding "--no expat" to
the CDuce command line.
- error messages:
The error messages provided by expat when parsing ill-formed XML documents
are less informative than those given by PXP.
- efficiency:
* expat is more efficient than PXP, and produces smaller executables.
* for PXP, ocamllex lexers are more efficient than wlex lexers.
------------------------------------------------------------------------------
Compile Cduce 0.5.5 using ocaml 3.12.1 and opam
------------------------------------------------------------------------------
The lastest stable version compatible with ocaml 3.12.1 is cudce 0.5.5
the git branch ocamlinterface is a fork from tag 0.5.5 and links the
ocaml source code (tags/3.12.1) via a git submodule. To correctly setup
the environment, first you need to switch on the ocamlinterface and
setup the ocaml submodule.
git clone -b ocamlinterface https://git.cduce.org/cduce
git submodule init
git submodule update
Then using OPAM you need to install and configure the correct compiler and
modules needed to build cduce. Ocamlfind will take care of installing the
cduce libraries and make them available.
./opam_config.sh 3.12.1
./configure --mliface=ocaml --prefix=$LOCALSWDIR
make
make install
ocamlfind list | grep cduce
find $HOME/.opam/ -name cduce_lib\*
which cduce
The directory tests contains few tests to check if the ocaml interface was
compiled correctly.
cd tests/ocaml
make
cduce-0.6.0/INSTALL.RPM 0000664 0000000 0000000 00000002203 12305625535 0014271 0 ustar 00root root 0000000 0000000 ftp://ftp.leo.org/pub/altlinux/Sisyphus/files/i586/RPMS/findlib-0.8-alt2s.i586.rpm
ftp://ftp.leo.org/pub/altlinux/Sisyphus/files/i586/RPMS/pxp-1.1.93-alt2s.i586.rpm
ftp://ftp.leo.org/pub/altlinux/Sisyphus/files/i586/RPMS/pcre-ocaml-4.28.3-alt3s.i586.rpm
In order to install the cduce rpm packages you will need to install
the following packages
All these packages can be found in the Altlinux distribution: for Asia
i586,
src; European mirror i586, src
N.B. rpm will check that you installed all these packages. If you have them installed but not via rpm then install CDuce by rpm -Uvh --nodeps cduce-X.X.X-X.rpm
cduce-0.6.0/INSTALL.WIN32 0000664 0000000 0000000 00000007246 12305625535 0014451 0 ustar 00root root 0000000 0000000 Installation Notes for Windows NT/2000/XP
=========================================
CDuce can be executed on Microsoft Windows by using the
RedHat/Cygnus environment Cygwin freely available at
http://www.cygwin.com/
The executable needs the cygwin1.dll that is distributed
under GPL license. This is not compatible with the CDuce license.
For this reason we do not provide binaries but give here detailed
instructions about how to compile CDuce sources under Cygwin/Windows.
------------------------------------------------------------------------------
Prerequisites
------------------------------------------------------------------------------
Before compiling CDuce on Windows, you need to install the
following releases of the these packages (newer releases may
work):
cygwin
http://www.cygwin.com
ocaml 3.10.0
http://caml.inria.fr/ocaml/distrib.html
findlib 1.2.1
http://www.ocaml-programming.de/packages
ulex 1.0
http://www.cduce.org/download.html
pcre-ocaml
http://ocaml.info/home/ocaml_sources.html
ocamlnet 2.2.9
http://www.ocaml-programming.de/packages
pxp 1.2.0
http://www.ocaml-programming.de/packages/documentation/pxp/index_dev.html
Installation notes (you are advised to follow this order):
1) Download and execute cygwin setup.exe.
- Choose Internet installation
- Choose a root directory whose path has no blanks in it
- Choose as Local Package Directory /usr/src (optional)
- Choose the mirror closest to you
- When asked to select the packages to install add to the default
choices the following packages:
Devel/
autoconf*
automake*
binutils
gcc*
make
patchutils
Interpreters/
m4
Lib/
libpcre
pcre
pcre-devel
you may also find useful to install the following packages
Editors/
emacs or vim (no trolls)
Net/
ncftp
openssh
Devel/
binutils
subversion
Utils/
bc
bzip2
diff
diffutils
file
patch
patchutils
then proceed with installation
2) Download (we suggest in /usr/src) and install Ocaml
[For the impatient:
./configure
make world.opt
make install]
3) Download (guess where) and install findlib.
A plain
./configure
make all
make opt
make install
should work, but it is worth checking that the paths that come
out looking right in Makefile.config after ./configure.
Otherwise correct paths in findlib.conf and re-run configure.
E.g.: ./configure -bindir /usr/local/bin -mandir /usr/local/man
4) Download and install ulex
The ocaml 3.10.0 version of ulex on cygwin requires to add the
"-classic-display" option to ocamlbuild in the Makefile.
make all
make all.opt
make install
5) Download and install pcre-ocaml.
If you get an error regarding dynmaically loaded library try to
add STATIC=yes in Makefile.conf
make
make install
6) Download and install ocamlnet
./configure
make all
make opt
make install
7) PXP:
CDuce requires a development version >= 1.1.93.
./configure -without-wlex -without-wlex-compat -lexlist utf8,iso88591 -without-pp
(there is a problem with the preprocessor in cygwin, so you
get an error if you don't add the -without-pp)
make all
make opt
make install
Now you can compile CDuce sources as indicated in the INSTALL file
namely
------------------------------------------------------------------------------
Compilation, installation
------------------------------------------------------------------------------
See the INSTALL file.
cduce-0.6.0/INSTALL.mingw 0000775 0000000 0000000 00000017227 12305625535 0014773 0 ustar 00root root 0000000 0000000 Installation Notes for Windows XP/MinGW
=======================================
It is possible to compile CDuce under cygwin with the MinGW toolchain.
Currently, the resulting executable still depends on the cygwin1.dll.
The suspect is pcre, but the source of the "pollution" has not been
determined.
The dependencies can be checked with the "cygcheck" command under
cygwin. Note that cygcheck searches in the PATH, i.e., if a binary is
not in the path, one must give the full path. To check a binary in
the mingw directory (e.g., C:\ocamlmgw\bin\cduce), one must give the
Mingw path (C:/ocamlmgw/bin/cduce) to cygcheck, not the cygwin path
(/cygdrive/c/ocamlmgw/bin).
When compiling under the MinGW toolchain, the option -mno-cygwin must
always be passed to the C compiler and linker. It is also necessary
to ensure that one is not linking against any cygwin libraries at any
point. The MinGW libraries are located in /usr/lib/...
Steps:
----------------------------------------------------------------------
1) In Cygwin, add the packages for MinGW support to the ones already
mentioned in INSTALL.WIN32.
gcc-mingw-core
mingw-runtime
w32-api
Remove the prce packages from Cygwin, to make sure that the pcre
used is the one installed under Mingw.
----------------------------------------------------------------------
2) Install tcl/tk in Windows
Install Tcl/Tk in a windows top directory, eg, C:\Tcl
binaries available as described in ocaml notes (README.win32).
----------------------------------------------------------------------
3) OCAML
Build ocaml 3.10 for the mingw toolchain as specified in README.win32,
but with the following addition from the ocaml mailing list:
From: Arnold Guillaumot snef.ro>
Subject: Re: Compiling with Cygwin/MinGW
Newsgroups: gmane.comp.lang.ocaml.lib.gtk
Date: 2007-09-05 18:55:39 GMT
Hi,
I succeeded in the past to build ocaml and lablgtk with MinGW/MSYS
(without Cygwin), together with ocamlmklib.
In the ocaml tree, change the following files:
1) ocamlmklib
The 'trick' is to copy the Makefile part of ocamlmklib in the Makefile.nt
edit tools/Makefile.nt and change the Line 26
all: ocamldep ocamlprof ocamlcp.exe ocamlmktop.exe primreq
in
all: ocamldep ocamlprof ocamlcp.exe ocamlmktop.exe primreq
ocamlmklib.exe
append the following lines after the ocamlmktop part:
# To help building mixed-mode libraries (Caml + C)
ocamlmklib.exe: myocamlbuild_config.cmo ocamlmklib.cmo
$(CAMLC) $(LINKFLAGS) -o ocamlmklib.exe myocamlbuild_config.cmo
ocamlmklib.cmo
ocamlmklib.cmo: myocamlbuild_config.cmi
myocamlbuild_config.ml: ../config/Makefile
../build/mkmyocamlbuild_config.sh
cp ../myocamlbuild_config.ml .
install::
cp ocamlmklib.exe $(BINDIR)/ocamlmklib.exe
clean::
rm -f ocamlmklib.exe
ocamlmklib.ml: ocamlmklib.mlp ../config/Makefile
echo '(* THIS FILE IS GENERATED FROM ocamlmklib.mlp *)' >ocamlmklib.ml
sed -e "s|%%BINDIR%%|$(BINDIR)|" \
-e
"s|%%SUPPORTS_SHARED_LIBRARIES%%|$(SUPPORTS_SHARED_LIBRARIES)|" \
-e "s|%%MKSHAREDLIB%%|$(MKSHAREDLIB)|" \
-e "s|%%BYTECCRPATH%%|$(BYTECCRPATH)|" \
-e "s|%%NATIVECCRPATH%%|$(NATIVECCRPATH)|" \
-e "s|%%MKSHAREDLIBRPATH%%|$(MKSHAREDLIBRPATH)|" \
-e "s|%%RANLIB%%|$(RANLIB)|" \
ocamlmklib.mlp >> ocamlmklib.ml
beforedepend:: ocamlmklib.ml
clean::
rm -f ocamlmklib.ml
It seems that this is not in the ocaml distribution because it doesn't
work under MSVS, only under MinGW, and since there is only one
Makefile.nt...
adjust PATH:
PATH=$PATH:/cygdrive/c/ocamlmgw/bin
----------------------------------------------------------------------
4) findlib
Patch configure replacing
stdlib = `get_stdlib`
with
stdlib = /cygdrive/c/ocamlmgw/lib
./configure -bindir /cygdrive/c/ocamlmgw/bin
Patch Makefile.config replacing
OCAML_CORE_MAN = /usr/local/man
with
OCAML_CORE_MAN = /cygdrive/c/ocamlmgw/man
(since ocaml for mingw does not install the man directories, the
mandir option does not work).
make all
make opt
make install
----------------------------------------------------------------------
5) ulex
This gets stuck with the error "can't found ocamlbuildlib.cma in
ocamlbuild -where", which is not surprising, since ocamlbuild -where
returns /ocamlbuildlib/lib, which doesn't exist. See ocaml bug 4379.
This is supposedly fixed in ocaml 3.10.1, but it still doesn't seem to
work.
Until this bug is fixed, patch Makefile to use
ocamlbuild -install-lib-dir "C:\ocamlmgw\lib\ocamlbuild"
(or whereever your mingw installation is). This workaround is
suitable for cygwin, but it may not work in Mingw/MSYS.
Remember to also add -classic-display to ocamlbuild, since we are
building with ocaml 3.10.
make all
make all.opt
make install
----------------------------------------------------------------------
6) PCRE:
Since the pcre that comes with cygwin cannot be used in mingw, install
pcre before pcre-ocaml. This is simpler if pcre is not installed in
cygwin.
Go back to cygwin's setup.exe and install gcc-g++ (C++ compiler).
Download pcre-7.2 from www.pcre.org or
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre
To configure pcre-7.2:
If pcre is installed in cygwin, patch ltmain.sh so that need_relink is
always "no", that may avoid the cygwin dependency.
./configure --prefix="C:/ocamlmgw" --exec-prefix="C:/ocamlmgw" --includedir=/usr/include/mingw --disable-cpp --enable-utf8 CFLAGS="-mno-cygwin -I /usr/include/w32api -I /usr/include/mingw"
Patch the Makefile to replace cygwin with mingw everywhere it occurs
(except in -mno-cygwin).
Patch the libtool file similarly.
make
make install
This installs the libs in the ocaml mingw directory
(e.g. C:\ocamlmgw\lib, but the .h files in /usr/include/mingw. This
should be suitable for continued compilation using the mingw
toolchain, but not for a pure mingw compilation.
Check with cygcheck whether, eg, pcregrep.exe, depends on the
cygwin1.dll and cygpcre-0.dll.
----------------------------------------------------------------------
7) pcre-ocaml:
Edit Makefile.conf to contain
export STATIC = yes
export INCDIRS := /usr/include/mingw
export LIBDIRS := C:/ocamlmgw/lib
MINGW=1
CC=gcc
export GCC
export MINGW
(If cc is not set, it defaults to cc, which causes 'make' to fail
spectacularly during
ocamlc -c -cc "cc" -ccopt "-fPIC -O2 -DPIC -mno-cygwin -I /usr/include/mingw -o pcre_stubs.o" pcre_stubs.c
sometimes even to the point of crashing cygwin.)
make
make install
The file pcre_make.win32/Makefile.mingw does not seem to work, either
it is for Mingw/MSYS or it has not been updated.
The file README.win32 concerns MS Visual Studio, i.e., it is
irrelevant.
To check that pcre actually works in ocaml:
make a file foo.ml that uses Pcre, eg
open Prce;;
qreplace;;
compile it with
ocamlc -I "C:/ocamlmgw/lib/site-lib/pcre" foo.ml
----------------------------------------------------------------------
8) pxp
./configure -without-wlex -without-wlex-compat -lexlist utf8,iso88591 -without-pp
make all
make opt
make install
----------------------------------------------------------------------
9) CDuce
./configure --prefix="C:/ocamlmgw" --mliface="C:/cygwin/usr/src/ocaml-3.10.0/"
patch Makefile.conf to set FORPACK=true
(For some reason that fails in configure.ml)
Patch Makefile.distrib to set
LINK = $(CAMLOPT) -custom -linkpkg
in line 71 to statically link the library.
make all
make install
cduce-0.6.0/LICENSE 0000664 0000000 0000000 00000002170 12305625535 0013613 0 ustar 00root root 0000000 0000000 The package CDuce is released under the terms of an MIT-like license.
Copyright 2005 by Alain Frisch and contributors.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
cduce-0.6.0/META.in 0000664 0000000 0000000 00000000265 12305625535 0013667 0 ustar 00root root 0000000 0000000 version="%VER%"
requires="%REQ%"
description="Runtime support for CDuce"
archive(byte)="+camlp4/camlp4lib.cma cduce_lib.cma"
archive(native)="+camlp4/camlp4lib.cmxa cduce_lib.cmxa"
cduce-0.6.0/Makefile 0000664 0000000 0000000 00000010606 12305625535 0014251 0 ustar 00root root 0000000 0000000 include Makefile.distrib
# For development
pull: tools/pull.$(EXTENSION)
$(LINK) -o $@ $^
PREPRO = camlp4o -I `ocamlfind query ulex` pa_ulex.cma pr_o.cmo $(SYNTAX) -sep "\n"
profile: misc/q_symbol.cmo
rm -Rf prepro
mkdir prepro
for i in $(DIRS); do \
mkdir prepro/$$i; \
for j in $$i/*.ml $$i/*.mli; do \
if [ -f "$$j" ]; then \
echo $$j; \
$(PREPRO) $$j -o prepro/$$j; \
fi; \
done; \
done
cp Makefile.distrib Makefile Makefile.conf prepro/
(cd prepro; \
touch depend; \
$(MAKE) compute_depend PROFILE=true SYNTAX_PARSER= ; \
$(MAKE) cduce PROFILE=true SYNTAX_PARSER= NATIVE=false)
SCRIPT =
INCLUDES_DEB = $(INCLUDES) $(shell ocamlfind query -i-format -recursive $(PACKAGES))
DEBUGGER = ocamldebug
debug:
ledit $(DEBUGGER) $(INCLUDES_DEB) ./cduce $(SCRIPT)
# Packaging
DISTRIB = $(DIRS) web cduce.spec depend INSTALL INSTALL.WIN32 CHANGES \
LICENSE README AUTHORS Makefile.conf.template configure configure.ml doc \
META.in cduce_mktop VERSION PLIST.godi Makefile.macosx tools/make-package-macosx
DISTRIB_DOC = doc.xml memento.xml tutorial.xml manual.xml tutorial manual \
xhtml.cd xhtml-categ.cd xhtml-strict.cd site.cd siteTypes.cd
PACKAGE = cduce-$(VERSION)
.PHONY: package
package: clean
rm -Rf $(PACKAGE)
mkdir $(PACKAGE)
cp -R $(DISTRIB) $(PACKAGE)/
cp Makefile.distrib $(PACKAGE)/Makefile
mkdir $(PACKAGE)/tools
cp tools/dtd2cduce.ml $(PACKAGE)/tools/
(cd $(PACKAGE); \
rm -f types/IDEAS; \
for F in $(DEPEND); do headache -h ../header $$F; done)
tar czf $(PACKAGE).tar.gz --exclude .svn --exclude ".#*" $(PACKAGE)
rm -Rf $(PACKAGE)
OCAML_STDLIBDIR := $(shell ocamlc -where)
.PHONY: .ocamlinit
.ocamlinit:
echo '(* AUTOMATICALLY GENERATED by Makefile: DO NOT EDIT! *)' > $@
echo '#load "$(OCAML_STDLIBDIR)/pcre/pcre.cma";;' >> $@
echo '#load "$(OCAML_STDLIBDIR)/unix.cma";;' >> $@
echo '#load "$(OCAML_STDLIBDIR)/netstring/netstring.cma";;' >> $@
# echo '#load "$(OCAML_STDLIBDIR)/netstring/netstring_top.cmo";;' >> $@
echo '#load "$(OCAML_STDLIBDIR)/pxp-engine/pxp_engine.cma";;' >> $@
# echo '#load "$(OCAML_STDLIBDIR)/pxp-engine/pxp_top.cmo";;' *)' >> $@
echo '#load "$(OCAML_STDLIBDIR)/pxp-lex-iso88591/pxp_lex_iso88591.cma";;' >> $@
echo '#load "$(OCAML_STDLIBDIR)/pxp-lex-iso88591/pxp_lex_link_iso88591.cmo";;' >> $@
echo '#load "$(OCAML_STDLIBDIR)/ulex/ulexing.cma";;' >> $@
echo '#load "$(OCAML_STDLIBDIR)/nums.cma";;' >> $@
# echo '#load "$(OCAML_STDLIBDIR)/num_top.cma";;' >> $@
echo '#load "$(OCAML_STDLIBDIR)/cgi/cgi.cma";;' >> $@
for o in $(VALIDATE_OBJECTS); do echo "prerr_endline \"Loading $$o ...\";;" >> $@; echo "#load \"$$o\";;" >> $@; done
for d in $(DIRS); do echo "#directory \"$$d\";;" >> $@; done
for p in pcre netstring pxp-engine ulex cgi; do echo "#directory \"`$(OCAMLFIND) query $$p`\";;" >> $@; done
echo "prerr_endline \"All done!\"" >> $@
echo '(* vim: set ft=ocaml: *)' >> $@
CVS_DISTRIB = web CHANGES LICENSE README AUTHORS cduce dtd2cduce
CVS_DOC = doc/cdo2ml.1 doc/cduce.1 doc/cduce_mktop.1 doc/cduce_validate.1 doc/dtd2cduce.1 doc/fomanual/tutorial.pdf doc/fomanual/manual.pdf
cvs_snapshot_bin: clean
if [[ `uname` != Linux ]]; then echo "Not a Linux box!"; exit 2; fi
$(MAKE) cduce dtd2cduce NATIVE=true EXTRA_LINK_OPTS="-ccopt -static" VERSION=cvs`date +%Y%m%d`
rm -Rf cduce-cvs
mkdir cduce-cvs
mkdir cduce-cvs/doc
cp -R $(CVS_DISTRIB) cduce-cvs
cp $(CVS_DOC) cduce-cvs/doc
cp Makefile.binary cduce-cvs/Makefile
tar czf cduce-cvs-linux-static.tar.gz --exclude CVS cduce-cvs
rm -Rf cduce-cvs
scp cduce-cvs-linux-static.tar.gz cduce@di.ens.fr:public_html/download
.PHONY: test
test: all
@tests/test.sh
extendedtest: all
@tests/test.sh -e
############ CGI DEMO ###################
cgi: webiface evaluator
driver/examples.ml: cduce web/xhtml.cdo web/examples/build.cd web/examples/examples.xml
(cd web/examples; ../../cduce build.cd -I .. --arg examples.xml)
WEBIFACE = $(OBJECTS) driver/examples.cmo driver/webiface.cmo
EVALUATOR = $(OBJECTS) driver/evaluator.cmo
webiface: $(WEBIFACE:.cmo=.$(EXTENSION))
@echo "Build $@"
$(HIDE)$(LINK) -verbose $(INCLUDES) -o $@ $^ $(EXTRA_OPTS_WEBIFACE)
evaluator: $(EVALUATOR:.cmo=.$(EXTENSION))
@echo "Build $@"
$(HIDE)$(LINK) -verbose $(INCLUDES) -o $@ $^ $(EXTRA_OPTS_WEBIFACE)
# webiface can be made static to be able to move it more easily
# (to compile it on a machine which is not the web server)
# Seems to be some problems with statically linking curl
# EXTRA_OPTS_WEBIFACE += -ccopt -static
cduce-0.6.0/Makefile.binary 0000664 0000000 0000000 00000000405 12305625535 0015530 0 ustar 00root root 0000000 0000000 # User Makefile for binary releases
webpages: web/site.cdo
(cd web; ../cduce --run site.cdo --arg site.xml)
web/site.cdo: web/xhtml.cdo web/site.cd
./cduce -I web/ --compile web/site.cd
web/xhtml.cdo: web/xhtml.cd
./cduce -I web/ --compile web/xhtml.cd
cduce-0.6.0/Makefile.conf.template 0000664 0000000 0000000 00000002744 12305625535 0017013 0 ustar 00root root 0000000 0000000 ## CDuce compilation options
##
## You can either modify this file, or run the configure script
# build CDuce using OCaml native code compiler
NATIVE = true
# profiling support
PROFILE = false
# .mli/.cmi file support to interface CDuce with OCaml.
# possible values: false, flat, tree
# - if ML_INTERFACE=flat, set ML_MODULES to a directory that
# contains all the compiled modules from the directory
# utils, parsing, typing of the OCaml compilers
# - if ML_INTERFACE=tree, set ML_MODULES to a directory
# with three subdirectories utils/ parsing/ typing/
# that contain the compiled modules
# (see cdo2cmo/Makefile for more details)
ML_INTERFACE = false
# use wlex lexers for parsing XML files with PXP
PXP_WLEX = false
# include support for expat
EXPAT = false
# use curl library to load remote xml files and schemas
CURL = false
# use netclient library to load remote xml files and schemas
NETCLIENT = true
# Installation directories
PREFIX = /usr/local
BINDIR = $(PREFIX)/bin
MANDIR = $(PREFIX)/man
# Customize the following variables to match the settings
# of your local web server
# Root directory of your local web-server
WEB_PREFIX = /var/www
# directory for installing the cgi-bin of the cduce interpreter
CGI_DIR = $(WEB_PREFIX)/cgi-bin
# installation directory for the website and man-pages
HTML_DIR = $(WEB_PREFIX)/html
# where temporary files of local interactive interpreter are put
SESSION_DIR = /tmp/cduce_sessions
# extension for programs (.exe under Cygwin)
EXE =
cduce-0.6.0/Makefile.distrib 0000664 0000000 0000000 00000022112 12305625535 0015703 0 ustar 00root root 0000000 0000000 default: cduce
include Makefile.conf
include VERSION
ALL_TARGET=cduce cduce_lib.cma
INSTALL_BINARIES=cduce$(EXE)
ifneq ($(ML_INTERFACE), false)
INSTALL_BINARIES += cduce_mktop
endif
OUNIT_TESTS=eval cdnum cdsdl misc
ifeq ($(NATIVE),true)
all: cduce_lib.cmxa
endif
PACKAGES = dynlink camlp4 ulex pcre num netstring
# Call make with VERBOSE=true to get a trace of commands
VERBOSE?=false
ifneq ($(VERBOSE), true)
HIDE=@
else
HIDE=
endif
SYNTAX = -I misc/ q_symbol.cmo \
-symbol cduce_version=\"$(VERSION)\" \
-symbol build_date=\"$(shell date +%Y-%m-%d)\" \
-symbol session_dir=\"$(SESSION_DIR)\" \
-loc "_loc"
SYNTAX_PARSER = -syntax camlp4o $(SYNTAX:%=-ppopt %)
CAMLC_P = ocamlc -g
DEPEND_OCAMLDEP = misc/q_symbol.cmo
ifeq ($(PROFILE), true)
CAMLOPT_P = ocamlopt -p -inline 10000
ifeq ($(NATIVE), false)
CAMLC_P = ocamlcp -p a
SYNTAX_PARSER =
DEPEND_OCAMLDEP =
endif
else
CAMLOPT_P = ocamlopt -inline 10000
endif
OPT = -warn-error FPSXY
ANNOT =
INTERFACE =
ifeq ($(ANNOT), true)
OPT += -passopt -dtypes
endif
ifeq ($(INTERFACE), true)
OPT += -passopt -i
endif
OCAMLFIND = ocamlfind
CAMLC = $(OCAMLFIND) $(CAMLC_P) $(OPT) -package "$(PACKAGES)"
CAMLOPT = $(OCAMLFIND) $(CAMLOPT_P) $(OPT) -package "$(PACKAGES)"
ifeq ($(NATIVE), true)
EXTENSION = cmx
EXTENSION_LIB = cmxa
CAML=ocamlopt
COMPILE = $(CAMLOPT)
LINK = $(CAMLOPT) -linkpkg
ifeq ($(NATDYNLINK), true)
LINK += dynlink.cmxa
endif
ifeq ($(ADDICON), true)
LINK += cduceres.o
endif
LINK += camlp4lib.cmxa
SYNTAX += -symbol ocaml_compiler=\"native\"
else
EXTENSION = cmo
EXTENSION_LIB = cma
COMPILE = $(CAMLC)
CAML=ocamlc
LINK = $(CAMLC) -custom -linkpkg camlp4lib.cma
SYNTAX += -symbol ocaml_compiler=\"bytecode\"
endif
ifeq ($(FORPACK),true)
FORPACKOPT=-passopt -for-pack -passopt Cduce_lib
else
FORPACKOPT=
endif
INSTALL := install -c
ifeq ($(NATIVE),true)
.PHONY: cduce_lib.cma
cduce_lib.cma:
$(HIDE)$(MAKE) NATIVE=false $@
endif
install: all install_bin install_lib install_doc
install_bin:
@echo "Install binaries"
$(HIDE)mkdir -p $(BINDIR)
$(HIDE)$(INSTALL) -m755 $(INSTALL_BINARIES) $(BINDIR)/
install_lib:
@echo "Build META"
$(HIDE)(sed "s/%REQ%/$(PACKAGES)/" < META.in | sed "s/%VER%/$(VERSION)/" > META)
$(HIDE)-$(OCAMLFIND) remove cduce
$(HIDE)-$(OCAMLFIND) install cduce META \
lib/cduce_lib.cmi lib/cduce_lib.cma lib/cduce_lib.cmxa lib/cduce_lib.a \
uninstall:
rm -f $(BINDIR)/cduce$(EXE) $(BINDIR)/cduce_mktop
rm -f $(MANDIR)/man1/cduce.1
rm -Rf $(DOCDIR)
ocamlfind remove cduce
help:
@echo "GOALS"
@echo " cduce : compiles the CDuce command line interpreter"
@echo " dtd2cduce: compiles the dtd2cduce tools"
@echo " doc : build the documentation"
@echo " all : build binaries and libraries"
@echo " install : install binaries, man pages, documentation"
@echo " clean : back to the starting point"
@echo " uninstall : remove installed files"
# Source directories
DIRS = misc parser schema typing types compile runtime driver query ocamliface win32
CLEAN_DIRS = $(DIRS) tools tests
# Objects to build
OBJECTS = \
driver/cduce_config.cmo misc/stats.cmo misc/custom.cmo misc/encodings.cmo \
misc/upool.cmo misc/pretty.cmo misc/ns.cmo misc/imap.cmo misc/html.cmo \
\
types/compunit.cmo types/sortedList.cmo misc/bool.cmo types/ident.cmo \
types/intervals.cmo types/chars.cmo types/atoms.cmo types/normal.cmo \
types/types.cmo compile/auto_pat.cmo \
types/sequence.cmo types/builtin_defs.cmo \
\
runtime/value.cmo \
\
schema/schema_pcre.cmo schema/schema_types.cmo \
schema/schema_xml.cmo schema/schema_common.cmo \
schema/schema_builtin.cmo schema/schema_validator.cmo \
\
types/patterns.cmo \
compile/print_auto.cmo \
\
compile/lambda.cmo \
runtime/run_dispatch.cmo runtime/explain.cmo runtime/eval.cmo \
\
parser/cduce_loc.cmo parser/url.cmo \
parser/ulexer.cmo parser/ast.cmo parser/parser.cmo \
\
typing/typed.cmo typing/typepat.cmo types/externals.cmo typing/typer.cmo \
compile/compile.cmo \
\
schema/schema_parser.cmo schema/schema_converter.cmo \
runtime/load_xml.cmo runtime/print_xml.cmo compile/operators.cmo types/builtin.cmo \
driver/librarian.cmo types/sample.cmo \
driver/cduce.cmo \
\
runtime/system.cmo query/query_aggregates.cmo
schema/schema_types.ml: schema/schema_types.mli
cp $^ $@
compile/auto_pat.ml: compile/auto_pat.mli
cp $^ $@
compile/lambda.ml: compile/lambda.mli
cp $^ $@
ML_INTERFACE_OBJS = \
ocamliface/caml_cduce.cmo \
ocamliface/mltypes.cmo ocamliface/mlstub.cmo
ifneq ($(ML_INTERFACE), false)
OBJECTS += $(ML_INTERFACE_OBJS)
endif
ifneq ($(CURL), false)
OBJECTS += parser/cduce_curl.cmo
PACKAGES += curl
endif
ifneq ($(NETCLIENT), false)
OBJECTS += parser/cduce_netclient.cmo
PACKAGES += netclient
endif
PXP_PACK=pxp-engine pxp-lex-iso88591
ifeq ($(PXP_WLEX), true)
PXP_PACK += pxp-wlex-utf8
else
PXP_PACK += pxp-lex-utf8
endif
ifeq ($(PXP),true)
OBJECTS += runtime/cduce_pxp.cmo
PACKAGES += $(PXP_PACK)
ifeq ($(CGI),true)
OBJECTS += runtime/cduce_pxp.cmo
PACKAGES += netcgi1
ALL_TARGET += dtd2cduce
INSTALL_BINARIES += dtd2cduce
endif
endif
ifeq ($(EXPAT), true)
OBJECTS += runtime/cduce_expat.cmo
PACKAGES += expat
endif
ifeq ($(ADDICON), true)
OBJECTS += cduceres.o
endif
all: $(ALL_TARGET)
OBJECTS += driver/run.cmo
CDUCE = $(OBJECTS) driver/start.cmo
ALL_OBJECTS = $(OBJECTS) \
driver/start.cmo driver/examples.cmo \
driver/webiface.cmo driver/evaluator.cmo \
tools/validate.cmo \
$(ML_INTERFACE_OBJS) parser/cduce_curl.cmo \
parser/cduce_netclient.cmo \
runtime/cduce_expat.cmo runtime/cduce_pxp.cmo
ALL_INTERFACES = schema/schema_types.mli
DEPEND = $(ALL_OBJECTS:.cmo=.ml) $(ALL_OBJECTS:.cmo=.mli) $(ALL_INTERFACES)
INCLUDES = $(DIRS:%=-I %)
# -I +camlp4
cduce: $(CDUCE:.cmo=.$(EXTENSION))
@echo "Build $@"
$(HIDE)$(LINK) $(INCLUDES) -o $@ $^ $(EXTRA_LINK_OPTS)
cduce_packed.ml: $(CDUCE:.cmo=.ml)
rm -f cduce_packed.ml
ocaml tools/pack.ml $^ > cduce_packed.ml
cduce_packed: cduce_packed.$(EXTENSION)
$(LINK) $(INCLUDES) -o $@ $^ $(EXTRA_LINK_OPTS)
cduce_lib.$(EXTENSION_LIB): $(OBJECTS:.cmo=.$(EXTENSION))
@echo "Pack cduce_lib.$(EXTENSION)"
@test -e lib || mkdir lib
$(HIDE)$(COMPILE) -o lib/cduce_lib.$(EXTENSION) $(INCLUDES) -pack $^
@echo "Build $@"
$(HIDE)$(COMPILE) -a -o lib/$@ lib/cduce_lib.$(EXTENSION)
dtd2cduce: tools/dtd2cduce.ml
@echo "Build $@"
$(HIDE)$(OCAMLFIND) $(CAML) -o $@ -package "$(PXP_PACK) netcgi1" -linkpkg $^
.PHONY: compute_depend
compute_depend: $(DEPEND_OCAMLDEP)
@echo "Computing dependencies ..."
ocamlfind ocamldep -package "$(PACKAGES)" \
$(INCLUDES) $(SYNTAX_PARSER) $(DEPEND) > depend
clean:
for i in $(CLEAN_DIRS); do \
(cd $$i; rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa *~); \
done
(cd ocamliface; $(MAKE) clean)
rm -f `find . -name "*~"`
rm -f *.cmi *.cmo *.cma *.cmx *.a *.cmxa *.o *~ META
rm -f cduce$(EXE) ocamlprof.dump
rm -f dtd2cduce$(EXE) webiface$(EXE) evaluator$(EXE)
rm -Rf prepro package
rm -f web/www/*.html web/*~
rm -f web/*.cdo
rm -f configure.log
rm -rf web/doc
rm -f META
rm -rf lib
$(RM) tests/schema/regtest/test.cd tests/schema/regtest/test.log
$(RM) tests/schema/test.cd tests/schema/test.log tests/misc/log tests/misc/memento.html tests/xsltmark/log tests/cql/log
$(RM) oUnit-* tests/ocaml/misc/consts.ml tests/ocaml/misc/consts.cdo tests/ocaml/misc/consts.cmi tests/ocaml/misc/consts.cmo tests/ocaml/latypes/latypes2* tests/ocaml/latypes/latypes tests/ocaml/latypes/latypes.c[dm][oxi] tests/ocaml/latypes/latypestest.cm[io]
for i in $(OUNIT_TESTS); do $(RM) `echo tests/ocaml/$$i/$$i tests/ocaml/$$i/$$i.ml tests/ocaml/$$i/$$i.c[dm][oxi] tests/ocaml/$$i/$${i}test.cm[io]`; done
distclean: clean
rm -f Makefile.conf
ocamliface/mltypes.$(EXTENSION): ocamliface/caml_cduce.$(EXTENSION)
$(ALL_OBJECTS:.cmo=.$(EXTENSION)): misc/q_symbol.cmo
$(ALL_INTERFACES): misc/q_symbol.cmo
.SUFFIXES: .ml .mli .cmo .cmi .cmx
misc/q_symbol.cmo: misc/q_symbol.ml
@echo "Build $@"
$(HIDE)$(CAMLC) -c -pp camlp4orf $<
.ml.cmo:
@echo "Build $@"
$(HIDE)$(CAMLC) -c $(INCLUDES) $(SYNTAX_PARSER) $<
.ml.cmx:
@echo "Build $@"
$(HIDE)$(CAMLOPT) $(FORPACKOPT) -c $(SYNTAX_PARSER) $(INCLUDES) $<
.mli.cmi:
@echo "Build $@"
$(HIDE)$(CAMLC) -c $(SYNTAX_PARSER) $(INCLUDES) $<
include depend
cduceres.o: win32/cduce.rc win32/cduce_logo-bw.ico
(cd win32; windres -i cduce.rc -o cduceres.o; mv cduceres.o ..)
# Documentation
doc: cduce web/site.cdo
mkdir -p web/doc
(cd web; ../cduce --run site.cdo --arg doc.xml -o doc)
web/site.cdo: cduce web/xhtml.cdo web/site.cd web/siteTypes.cd
./cduce -I web/ --compile web/site.cd
web/xhtml.cdo: cduce web/xhtml.cd
./cduce -I web/ --compile web/xhtml.cd
install_doc: doc
$(HIDE)mkdir -p $(MANDIR)/man1
$(HIDE)(cd doc; $(MAKE) install INSTALL="$(INSTALL)" MANDIR=$(MANDIR) HIDE=$(HIDE))
mkdir -p $(DOCDIR)/img
cp web/doc/*.html $(DOCDIR)/
cp CHANGES INSTALL INSTALL.WIN32 README AUTHORS LICENSE $(DOCDIR)/
cp web/img/left.gif web/img/right.gif $(DOCDIR)/img
### Pack OCaml modules for the CDuce/OCaml interface
ocamliface/caml_cduce.cmo:
@cd ocamliface; \
$(MAKE) caml_cduce.cmo
ocamliface/caml_cduce.cmx:
@cd ocamliface; \
$(MAKE) caml_cduce.cmx
cduce-0.6.0/Makefile.macosx 0000664 0000000 0000000 00000000512 12305625535 0015535 0 ustar 00root root 0000000 0000000
include VERSION
.PHONY: package-macosx
package-macosx:
mkdir -p package-macosx/root
mkdir -p package-macosx/root/lib/ocaml
sh configure --prefix=`pwd`/package-macosx/root
OCAMLFIND_DESTDIR=package-macosx/root/lib/ocaml make install
VERSION=$(VERSION) tools/make-package-macosx
clean-macosx:
sudo rm -rf package-macosx
cduce-0.6.0/Makefile.types 0000664 0000000 0000000 00000003233 12305625535 0015412 0 ustar 00root root 0000000 0000000 DIRS= cduce/misc cduce/types cduce/compile cduce/runtime
ML_SRC= \
cduce/misc/serialize.ml \
cduce/misc/custom.ml \
cduce/misc/encodings.ml \
cduce/misc/imap.ml \
cduce/misc/state.ml \
cduce/misc/pool.ml \
cduce/misc/ns.ml \
cduce/types/sortedList.ml \
cduce/types/atoms.ml \
cduce/misc/bool.ml \
cduce/types/chars.ml \
cduce/types/ident.ml \
cduce/types/intervals.ml \
cduce/misc/inttbl.ml \
cduce/types/normal.ml \
cduce/misc/pretty.ml \
cduce/misc/stats.ml \
cduce/types/types.ml \
cduce/types/sequence.ml \
cduce/types/sample.ml \
cduce/types/patterns.ml \
cduce/compile/lambda.ml \
cduce/runtime/value.ml \
cduce/runtime/run_dispatch.ml \
cduce/runtime/explain.ml \
cduce/runtime/serial.ml
CMO_OBJECTS=$(ML_SRC:.ml=.cmo)
CMX_OBJECTS=$(ML_SRC:.ml=.cmx)
$(CMO_OBJECTS) $(CMX_OBJECTS): $(COMPILER)
$(CMX_OBJECTS): $(OPTCOMPILER)
cduce_types.cmo: $(CMO_OBJECTS)
$(CAMLC) $(COMPFLAGS) -pack -o cduce_types.cmo $(CDUCE_INCLUDES) $(CMO_OBJECTS)
cduce_types.cmx: $(CMX_OBJECTS)
$(CAMLOPT) $(OPTCOMPFLAGS) -pack -o cduce_types.cmx $(CDUCE_INCLUDES) $(CMX_OBJECTS)
cduce_types.p.cmx: cduce_types.cmx
cp cduce_types.cmx cduce_types.p.cmx
cp cduce_types.o cduce_types.p.o
CDUCE_INCLUDES = $(DIRS:%=-I %)
.SUFFIXES: .ml .mli .cmo .cmi .cmx
.ml.cmo:
$(CAMLC) $(COMPFLAGS) -c $(CDUCE_INCLUDES) $<
.ml.cmx:
$(CAMLOPT) $(OPTCOMPFLAGS) -c $(CDUCE_INCLUDES) $<
.mli.cmi:
$(CAMLC) $(COMPFLAGS) -c $(CDUCE_INCLUDES) $<
.PHONY: compute_depend
compute_depend:
ocamldep $(CDUCE_INCLUDES) $(SRC) $(SRC:.ml=.mli) > cduce/types_depend
include cduce/types_depend
clean:
for i in $(DIRS); do \
(cd $$i; rm -f *.cmi *.cmo *.cma *.cmx *.o *.a *.cmxa *~); \
done
cduce-0.6.0/PLIST.godi 0000664 0000000 0000000 00000000242 12305625535 0014343 0 ustar 00root root 0000000 0000000 @comment $GODI$
bin/cduce
bin/cduce_mktop
@glob bin/dtd2cduce
man/man1/cduce.1
man/man1/cduce_mktop.1
man/man1/dtd2cduce.1
@deepdir doc/apps-cduce
@findlib cduce
cduce-0.6.0/README 0000664 0000000 0000000 00000010033 12305625535 0013463 0 ustar 00root root 0000000 0000000 README - CDuce
This package is distributed under the terms of an MIT-like License
(see the LICENSE file).
------------------------------------------------------------------------------
Abstract
------------------------------------------------------------------------------
CDuce is a programming language adapted to the manipulation of XML
documents. It has been designed and developed as a joint research
project between the Languages group at ENS (Paris) and the Database
group at LRI (Orsay) (http://www.lri.fr/bd).
The current implementation has been written to demonstrate the
innovative features of the language and to validate design choices.
It is a research prototype, not a robust application. However, it has
been reported to work properly in a production environment.
Further information about CDuce is available at
http://www.cduce.org
------------------------------------------------------------------------------
Source distribution
------------------------------------------------------------------------------
See the INSTALL file for Installation instructions.
1. CDuce command-line interpreter / toplevel
For performance reasons, it is advised to build it using OCaml native code
compiler (by default in the Makefile).
See the man page or HTML manual for usage.
When no CDuce file is given on the command line, the interpreter
behaves as a toplevel. Phrases are interpreted when the user type
";;". Of course, mutually recursive definition (types or functions)
must be entirely contained in an adjacent sequence of phrases
(without ";;" inbetween).
2. CDuce CGI interface
It is also possible to play with CDuce in a web browser, using the
webiface CGI interface (or webiface.opt) program. Of course, You will
need a web server with CGI support.
There is usually a running version at:
http://www.cduce.org/cgi-bin/cduce
Some features are disabled in the web interface (including
file manipulation).
3. dtd2cduce
dtd2cduce is small tool that generates CDuce type declarations from
a DTD.
Usage: dtd2cduce <.dtd file>
is a string prepended to tag names to form CDuce type names.
The generated declarations are sent to the standard output.
dtd2cduce can also operates as a cgi-bin. You can access it using
the form at this URL:
http://www.cduce.org/dtd2cduce.html
4. CDuce web site
The source files (XML + CDuce) for the CDuce web site
(http://www.cduce.org/) are included in the web/ subdirectory.
------------------------------------------------------------------------------
Binary distribution
------------------------------------------------------------------------------
If you have downloaded the "linux static" binary distribution, you got
the cduce and dtd2cduce executables, the man pages, and the web/
subdirectory. To build the website, just do "make".
------------------------------------------------------------------------------
Documentation
------------------------------------------------------------------------------
There are several sources of information concerning CDuce:
- we started to write a manual and a tutorial as part of the web site.
You can find the manual at:
http://www.cduce.org/manual.html
or generate it locally (make local_website). Note that the online
version is probably more up-to-date than the one included in the
distribution.
- papers about CDuce:
http://www.cduce.org/papers.html
- code examples:
In the web site:
http://www.cduce.org/examples.html
http://www.cduce.org/bench.html
In the distribution:
web/site.cd
web/examples/build.cd
Online prototype:
http://www.cduce.org/cgi-bin/cduce
- the CDuce users' mailing-list:
http://www.cduce.org/mailing.html
- and of course the source code!
------------------------------------------------------------------------------
Feedback
------------------------------------------------------------------------------
We'll appreciate any feedback (comments, suggestions, questions,
bug reports, ...) concerning the CDuce language or this early release
of the interpreter at info@cduce.org
-- The CDuce team
cduce-0.6.0/TODO 0000664 0000000 0000000 00000005104 12305625535 0013276 0 ustar 00root root 0000000 0000000
- Define a small library to pretty print xml documents
e.g. pretty_dump_xml_to_file (shorter name of course)
- Dans l'evaluateur, pour les appels en position terminale, essayer de rutiliser
l'environnement (si c'est la bonne taille, rutiliser le bloc; si c'est les bonnes
valeurs, juste utiliser le mme bloc).
- Problem: a custom toplevel doesn't find ./cdo2ml (should put the path
to cduce's directory in the toplevel?)
======================================================================
Alain 2005-06-18
Simplifier la srialisation/dserialisation des structures internes;
utiliser les fonctions de srialisation de Caml.
Plan d'attaque:
- utiliser des cls de hachage au lieu d'entiers squentiels pour reprsenter
les namespaces, tags, labels, identificateurs; signaler quand mme
les collisions dans chaque espace de nommage.
type 'a t
val mk: int -> 'a t = "%identity"
val get: 'a t -> int = "%identity"
(autre avantage: possibilit de generer statiquement tables de dispatch
sur les atomes)
- pour les structures cycliques (types, patterns, automates): attacher
un identifiant unique d'unit de compilation dans chaque noeud;
interdire deux units avec mme id. Accepter que les mmes noeuds
se retrouvent dupliqus en mmoire (on peut quand detecter l'galit
en regardant id d'unit + id squentiel).
Autres ides:
- applatir la representation des valeurs.
| Atom of ns * local
| Xml of ns * local * fields * v
(support du systme de types pour interdire autre chose en position
de tag / attribut - bonne chose de toute manire).
- reprsentation plus compacte des descriptions de types, liste
chaine par ordre croissant des constructeurs:
type descr =
| Prod of BoolPair.t * descr
| Times of BoolPair.t * descr
| ...
| Empty
Avantage: oprations plus rapides ? ( vrifier) Bien choisir
l'ordre.
Supprimer cl de hash stocke.
- Utiliser un gnrateur automatique pour les fonctions de hash/comparaison.
======================================================================
Alain 2005-03-04
Handle OCaml exception in the OCaml/CDuce interface
======================================================================
Beppe 2003-11-30
Add url support for non selfcontained documents and expat
======================================================================
Beppe 2003-01-23
Add the following types.
String
T> String
String
Alain 2003-05-15
Il faut faire attention: on ne veut pas de commentaires dans la
representation interne, on ne veut pas distinguer section CDATA, etc...
cduce-0.6.0/VERSION 0000664 0000000 0000000 00000000016 12305625535 0013653 0 ustar 00root root 0000000 0000000 VERSION=0.6.0
cduce-0.6.0/benchmarks/ 0000775 0000000 0000000 00000000000 12305625535 0014723 5 ustar 00root root 0000000 0000000 cduce-0.6.0/benchmarks/Makefile 0000664 0000000 0000000 00000000462 12305625535 0016365 0 ustar 00root root 0000000 0000000 split:
ocaml unix.cma bench.ml split 0,10,50,100,500,1000 \
split*.cd split*.xsl \
| tee split.results
addrbook:
ocaml unix.cma bench.ml addrbook 0,1000,5000,10000,50000,100000 \
addrbook*.cd addrbook*.xsl \
| tee addrbook.results
clean:
rm -f split.*.xml addrbook.*.xml
rm -f *~
rm -f *.results
cduce-0.6.0/benchmarks/addrbook.ml 0000664 0000000 0000000 00000001067 12305625535 0017046 0 ustar 00root root 0000000 0000000 let random_string n =
let s = String.create n in
for i = 0 to n - 1 do
s.[i] <- Char.chr (65 + (Random.int 26))
done;
s;;
let nb = int_of_string Sys.argv.(1);;
print_string "";;
for i = 1 to nb do
Printf.printf "%s" (random_string 20);
if Random.int 2 = 0 then Printf.printf "%s" (random_string 20);
for j = 1 to (Random.int 4) do
Printf.printf "%s" (random_string 20)
done;
Printf.printf ""
done;;
print_string "";;
cduce-0.6.0/benchmarks/addrbook1.cd 0000664 0000000 0000000 00000001051 12305625535 0017076 0 ustar 00root root 0000000 0000000 type Addrbook = [Person*]
type Person = [(Name Tel? Email* )]
type Name = String
type Tel = String
type Email = String
let mkTelbook ([Person*] -> [[Name Tel] *])
| [ [ (n & Name) (t & Tel) ; _ ]; rest] ->
[ [n t]; mkTelbook rest ]
| [ [ Name ; _ ] ; rest] -> mkTelbook rest
| [] -> []
match argv [] with
| [ f ] ->
(match load_xml f with
| (x & [Person*]) -> mkTelbook x
| _ -> raise "Invalid document")
| _ -> raise "Invalid command line"
cduce-0.6.0/benchmarks/addrbook1.q 0000664 0000000 0000000 00000001211 12305625535 0016746 0 ustar 00root root 0000000 0000000 import "xml.q"
type Addrbook = addrbook[Person*]
type Person = person[(Name,Tel?,Email* )]
type Name = name[String]
type Tel = tel[String]
type Email = email[String]
fun mkTelbook (val ps as Person* ) : entry[(Name,Tel)]* =
match ps with
person[name[val n], tel[val t],val e],val rest
-> entry[name[n], tel[t]], mkTelbook(rest)
| person[name[val n],val e],val rest
-> mkTelbook(rest)
| ()
-> ()
let val _ =
match argv() with
val fn as String ->
( match load_xml(fn) with
addrbook[val p as Person*] -> mkTelbook(p)
| Any -> raise("Invalid document") )
| Any -> raise("Invalid command line")
cduce-0.6.0/benchmarks/addrbook1.xsl 0000664 0000000 0000000 00000000776 12305625535 0017333 0 ustar 00root root 0000000 0000000
cduce-0.6.0/benchmarks/addrbook2.cd 0000664 0000000 0000000 00000001003 12305625535 0017074 0 ustar 00root root 0000000 0000000 type Addrbook = [Person*]
type Person = [(Name Tel? Email* )]
type Name = String
type Tel = String
type Email = String
let mkTelbook ([Person*] -> [[Name Tel] *])
| [ <_>[ n (t & _) ; _ ]; rest] -> [ [n t]; mkTelbook rest ]
| [ _ ; rest] -> mkTelbook rest
| [] -> []
match argv [] with
| [ f ] ->
(match load_xml f with
| (x & [Person*]) -> mkTelbook x
| _ -> raise "Invalid document")
| _ -> raise "Invalid command line"
cduce-0.6.0/benchmarks/addrbook2.q 0000664 0000000 0000000 00000001150 12305625535 0016751 0 ustar 00root root 0000000 0000000 import "xml.q"
type Addrbook = addrbook[Person*]
type Person = person[(Name,Tel?,Email* )]
type Name = name[String]
type Tel = tel[String]
type Email = email[String]
fun mkTelbook (val ps as Person* ) : entry[(Name,Tel)]* =
filter ps {
( person[name[val n], tel[val t], val e]
{ entry[name[n], tel[t]] }
| person[name[val n], val e as Email*]
{ () }
)*
}
let val _ =
match argv() with
val fn as String ->
( match load_xml(fn) with
addrbook[val p as Person*] -> mkTelbook(p)
| Any -> raise("Invalid document") )
| Any -> raise("Invalid command line")
cduce-0.6.0/benchmarks/addrbook2.xsl 0000664 0000000 0000000 00000000773 12305625535 0017331 0 ustar 00root root 0000000 0000000
cduce-0.6.0/benchmarks/addrbook3.cd 0000664 0000000 0000000 00000000744 12305625535 0017110 0 ustar 00root root 0000000 0000000 type Addrbook = [Person*]
type Person = [(Name Tel? Email* )]
type Name = String
type Tel = String
type Email = String
let mkTelbook (l : [Person*]) : [[Name Tel] *] =
transform l with [ (n & Name) (t & Tel) ; _ ] -> [ [n t] ]
match argv [] with
| [ f ] ->
(match load_xml f with
| (x & [Person*]) -> (mkTelbook x)
| _ -> raise "Invalid document")
| _ -> raise "Invalid command line"
cduce-0.6.0/benchmarks/addrbook3.q 0000664 0000000 0000000 00000001172 12305625535 0016756 0 ustar 00root root 0000000 0000000 import "xml.q"
type Addrbook = addrbook[Person*]
type Person = person[(Name,Tel?,Email* )]
type Name = name[String]
type Tel = tel[String]
type Email = email[String]
fun mkTelbook (val ps as Person* ) : entry[(Name,Tel)]* =
filter ps {
person[Name,Email*]*,
person[name[val n], tel[val t], val e], val rest
{ entry[name[n], tel[t]], mkTelbook(rest) }
| person[Name,Email*]*
{ () }
}
let val _ =
match argv() with
val fn as String ->
( match load_xml(fn) with
addrbook[val p as Person*] -> mkTelbook(p)
| Any -> raise("Invalid document") )
| Any -> raise("Invalid command line")
cduce-0.6.0/benchmarks/addrbook4.cd 0000664 0000000 0000000 00000000713 12305625535 0017105 0 ustar 00root root 0000000 0000000 type Addrbook = [Person*]
type Person = [(Name Tel? Email* )]
type Name = String
type Tel = String
type Email = String
let mkTelbook (l : [Person*]) : [[Name Tel] *] =
transform l with <_>[ n (t & _) ; _ ] -> [ [n t] ]
match argv [] with
| [ f ] ->
(match load_xml f with
| (x & [Person*]) -> mkTelbook x
| _ -> raise "Invalid document")
| _ -> raise "Invalid command line"
cduce-0.6.0/benchmarks/bench.ml 0000664 0000000 0000000 00000006047 12305625535 0016343 0 ustar 00root root 0000000 0000000 open Printf
let time_cmd = "/usr/bin/time"
let cduce_cmd = "../cduce"
let xduce_cmd = "/home/frisch/xduce-0.4.0/xduce.opt"
let xduce_024_cmd = "/home/frisch/xduce-0.2.4/xduce.opt"
let xslt_cmd = "xsltproc"
let rec split c s =
try
let i = String.index s c in
(String.sub s 0 i) ::
(split c (String.sub s (i + 1) (String.length s - i - 1)))
with Not_found -> [ s ]
let has_prefix pre s =
let ls = String.length s in
let lpre = String.length pre in
(ls >= lpre) && (String.sub s 0 lpre) = pre
let extract_prefix pre s =
let ls = String.length s in
let lpre = String.length pre in
if (ls >= lpre) && (String.sub s 0 lpre) = pre
then (String.sub s lpre (ls - lpre))
else failwith "Invalid string"
let has_suffix pre s =
let ls = String.length s in
let lpre = String.length pre in
(ls >= lpre) && (String.sub s (ls - lpre) lpre) = pre
let name, args, scripts =
match (Array.to_list Sys.argv) with
| _ :: name :: args :: scripts -> (name,args,scripts)
| _ ->
Printf.eprintf "Please specify bench name and size list";
exit 1
let scripts ext = List.filter (has_suffix ext) scripts
let gen = name ^ ".ml"
let xml = name
let args = List.map int_of_string (split ',' args)
let sp = sprintf
let langs =
[
(* "CDuce PXP", ".cd",
(fun script xml ->
sp "%s --pxp --quiet %s --arg %s" cduce_cmd script xml); *)
"CDuce", ".cd",
(fun script xml ->
sp "%s %s --no ocaml --arg %s" cduce_cmd script xml);
(* "CDuce.old", ".cd",
(fun script xml ->
sp "%s --quiet %s --arg %s" (cduce_cmd^".old") script xml);*)
"XDuce 0.4.0", ".q",
(fun script xml ->
sp "%s %s %s" xduce_cmd script xml);
"XDuce 0.2.4", ".q",
(fun script xml ->
sp "%s %s %s" xduce_024_cmd script xml);
"XDuce 0.2.4 - patopt", ".q",
(fun script xml ->
sp "%s %s -patopt %s" xduce_024_cmd script xml);
"XSLT", ".xsl",
(fun script xml ->
sp "%s --noout %s %s" xslt_cmd script xml);
]
let pr = printf
let rep = 3
let time s =
let s = sp "%s -p %s 2>&1" time_cmd s in
(* pr "Running: %s\n" s; *)
flush stdout;
for i = 1 to rep do
let ic = Unix.open_process_in s in
let real = input_line ic in
let user = input_line ic in
let sys = input_line ic in
match (Unix.close_process_in ic) with
| Unix.WEXITED 0 ->
pr "%s,%s "
(extract_prefix "user " user)
(extract_prefix "real " real);
flush stdout;
| _ ->
pr "err"
done;
pr "\n"
let run s =
flush stdout;
ignore (Sys.command s)
let () =
List.iter
(fun s ->
let fn = sp "%s.%i.xml" xml s in
if not (Sys.file_exists fn) then
run (sp "ocaml %s %i > %s" gen s fn);
let ic = open_in fn in
let size = in_channel_length ic in
close_in ic;
pr "XML size = %i; records = %i\n" size s;
List.iter
(fun (lang, ext, cmd) ->
List.iter
(fun file ->
pr "%20s[%20s] " lang file;
time (cmd file fn)
) (scripts ext)
)
langs;
pr "====================================\n"
)
args
cduce-0.6.0/benchmarks/split.ml 0000664 0000000 0000000 00000001073 12305625535 0016411 0 ustar 00root root 0000000 0000000 let random_string n =
let s = String.create n in
for i = 0 to n - 1 do
s.[i] <- Char.chr (65 + (Random.int 26))
done;
s;;
let nb = int_of_string Sys.argv.(1);;
print_string "";;
let rec person p =
Printf.printf "%s\n"
(if Random.int 2 = 0 then "M" else "F")
(random_string 20);
if p < 5 then for i = 1 to Random.int 5 do person (p+1) done;
Printf.printf "\n";;
for i = 1 to nb do
person 0;
done;;
print_string "";;
cduce-0.6.0/benchmarks/split0.cd 0000664 0000000 0000000 00000001366 12305625535 0016454 0 ustar 00root root 0000000 0000000 type Person = FPerson | MPerson
type FPerson = [ Name Children ]
type MPerson = [ Name Children ]
type Children = [Person*]
type Name = [ PCDATA ]
type Man = [ Sons Daughters ]
type Woman = [ Sons Daughters ]
type Sons = [ Man* ]
type Daughters = [ Woman* ]
let split (MPerson -> Man ; FPerson -> Woman)
[ n [(mc::MPerson | fc::FPerson)*] ] ->
let tag = match g with "F" -> `woman | "M" -> `man in
let s = map mc with x -> split x in
let d = map fc with x -> split x in
<(tag) name=n>[ s d ]
match argv [] with
| [ f ] -> load_xml f
| _ -> raise "Invalid command line"
cduce-0.6.0/benchmarks/split1.cd 0000664 0000000 0000000 00000001525 12305625535 0016452 0 ustar 00root root 0000000 0000000 type Person = FPerson | MPerson
type FPerson = [ Name Children ]
type MPerson = [ Name Children ]
type Children = [Person*]
type Name = [ PCDATA ]
type Man = [ Sons Daughters ]
type Woman = [ Sons Daughters ]
type Sons = [ Man* ]
type Daughters = [ Woman* ]
let split (MPerson -> Man ; FPerson -> Woman)
[ n [(mc::MPerson | fc::FPerson)*] ] ->
let tag = match g with "F" -> `woman | "M" -> `man in
let s = map mc with x -> split x in
let d = map fc with x -> split x in
<(tag) name=n>[ s d ]
match argv [] with
| [ f ] ->
(match (load_xml f :? [ Person* ]) with
| <_>l -> print_xml ((map l with x -> split x)))
| _ -> raise "Invalid command line"
cduce-0.6.0/benchmarks/split1.q 0000664 0000000 0000000 00000002424 12305625535 0016323 0 ustar 00root root 0000000 0000000 import "xml.q"
type Person = FPerson | MPerson
type FPerson = person[ @gender["F"], Name, Children ]
type MPerson = person[ @gender["M"], Name, Children ]
type Children = children[Person*]
type Name = name[ String ]
type Man = man[ @name[String], Sons,Daughters ]
type Woman = woman[ @name[String], Sons,Daughters ]
type Sons = sons[ Man* ]
type Daughters = daughters[ Woman* ]
fun split_children (val c as Person* ) : (Sons,Daughters) =
let val s = filter c {( val m as MPerson { split_m(m) } | FPerson { () })*} in
let val d = filter c {( MPerson { () } | val f as FPerson { split_f(f) })*} in
sons[s], daughters[d]
fun split_m (val p as MPerson) : Man =
match p with
person[ @gender[String], name[val n], children[val c] ] ->
man[ @name[n], split_children(c) ]
fun split_f (val p as FPerson) : Woman =
match p with
person[ @gender[String], name[val n], children[val c] ] ->
woman[ @name[n], split_children(c) ]
fun split_seq (val p as Person* ) : (Man|Woman)* =
filter p {
( val f as FPerson { split_f(f) }
| val m as MPerson { split_m(m) })*
}
let val _ =
match argv() with
val fn as String ->
( match load_xml(fn) with
doc[val p as Person*] -> doc[ split_seq(p) ]
| Any -> raise("Invalid document") )
| Any -> raise("Invalid command line")
cduce-0.6.0/benchmarks/split1.xsl 0000664 0000000 0000000 00000001327 12305625535 0016672 0 ustar 00root root 0000000 0000000
cduce-0.6.0/benchmarks/split2.cd 0000664 0000000 0000000 00000001533 12305625535 0016452 0 ustar 00root root 0000000 0000000 type Person = FPerson | MPerson
type FPerson = [ Name Children ]
type MPerson = [ Name Children ]
type Children = [Person*]
type Name = [ PCDATA ]
type Man = [ Sons Daughters ]
type Woman = [ Sons Daughters ]
type Sons = [ Man* ]
type Daughters = [ Woman* ]
let split (MPerson -> Man ; FPerson -> Woman)
<_ gender=g>[ <_>n <_>[(mc::<_ gender="M">_ | fc::_)*] ] ->
let tag = match g with "F" -> `woman | "M" -> `man in
let s = map mc with x -> split x in
let d = map fc with x -> split x in
<(tag) name=n>[ s d ]
match argv [] with
| [ f ] ->
(match load_xml f with
| (l & [Person*]) -> (map l with x -> split x)
| _ -> raise "Invalid document")
| _ -> raise "Invalid command line"
cduce-0.6.0/benchmarks/split2.q 0000664 0000000 0000000 00000002517 12305625535 0016327 0 ustar 00root root 0000000 0000000 import "xml.q"
type Person = FPerson | MPerson
type MPerson = person[ @gender["M"], Name, Children ]
type FPerson = person[ @gender["F"], Name, Children ]
type Children = children[Person*]
type Name = name[ String ]
type Man = man[ @name[String], Sons,Daughters ]
type Woman = woman[ @name[String], Sons,Daughters ]
type Sons = sons[ Man* ]
type Daughters = daughters[ Woman* ]
fun split_children (val c as Person* ) : (Sons,Daughters) =
let val s = filter c {( val m as ~[ @gender["M"], ~[Any]* ] { split_m(m) } | ~[Any] { () })*} in
let val d = filter c {( val f as ~[ @gender["F"], ~[Any]* ] { split_f(f) } | ~[Any] { () })*} in
sons[s], daughters[d]
fun split_m (val p as MPerson) : Man =
match p with
~[ @gender[String], ~[val n], ~[val c] ] ->
man[ @name[n], split_children(c) ]
fun split_f (val p as FPerson) : Woman =
match p with
~[ @gender[String], ~[val n], ~[val c] ] ->
woman[ @name[n], split_children(c) ]
fun split_seq (val p as Person* ) : (Man|Woman)* =
filter p {
( val f as ~[ @gender["F"], ~[Any], ~[Any] ] { split_f(f) }
| val m as ~[ @gender["M"], ~[Any], ~[Any] ] { split_m(m) })*
}
let val _ =
match argv() with
val fn as String ->
( match load_xml(fn) with
doc[val p as Person*] -> doc[ split_seq(p) ]
| Any -> raise("Invalid document") )
| Any -> raise("Invalid command line")
cduce-0.6.0/benchmarks/split2.xsl 0000664 0000000 0000000 00000001301 12305625535 0016663 0 ustar 00root root 0000000 0000000
manwomen
cduce-0.6.0/benchmarks/split3.cd 0000664 0000000 0000000 00000002032 12305625535 0016446 0 ustar 00root root 0000000 0000000 type Person = FPerson | MPerson
type FPerson = [ Name Children ]
type MPerson = [ Name Children ]
type Children = [Person*]
type Name = [ PCDATA ]
type Man = [ Sons Daughters ]
type Woman = [ Sons Daughters ]
type Sons = [ Man* ]
type Daughters = [ Woman* ]
let split_m (MPerson -> Man)
<_ ..>[ <_>n <_>[(mc::<_ gender="M">_ | fc::_)*] ] ->
let s = map mc with x -> split_m x in
let d = map fc with x -> split_f x in
[ s d ]
let split_f (FPerson -> Woman)
<_ ..>[ <_>n <_>[(mc::<_ gender="M">_ | fc::_)*] ] ->
let s = map mc with x -> split_m x in
let d = map fc with x -> split_f x in
[ s d ]
match argv [] with
| [ f ] ->
(match load_xml f with
| (l & [Person*]) ->
(map l with x & MPerson -> split_m x | x & FPerson -> split_f x)
| _ -> raise "Invalid document")
| _ -> raise "Invalid command line"
cduce-0.6.0/benchmarks/split3.q 0000664 0000000 0000000 00000003175 12305625535 0016331 0 ustar 00root root 0000000 0000000 import "xml.q"
type Person = FPerson | MPerson
type MPerson = person[ @gender["M"], Name, Children ]
type FPerson = person[ @gender["F"], Name, Children ]
type Children = children[Person*]
type Name = name[ String ]
type Man = man[ @name[String], Sons,Daughters ]
type Woman = woman[ @name[String], Sons,Daughters ]
type Sons = sons[ Man* ]
type Daughters = daughters[ Woman* ]
fun split_mpersons (val c as Person* ) : Man* = match c with
val m as ~[ @gender["M"], ~[Any]* ], val rest ->
split_m(m), split_mpersons(rest)
| ~[Any], val rest ->
split_mpersons(rest)
| () ->
()
fun split_fpersons (val c as Person* ) : Woman* = match c with
val f as ~[ @gender["F"], ~[Any]* ], val rest ->
split_f(f), split_fpersons(rest)
| ~[Any], val rest ->
split_fpersons(rest)
| () ->
()
fun split_children (val c as Person* ) : (Sons,Daughters) =
let val s = split_mpersons(c) in
let val d = split_fpersons(c) in
sons[s], daughters[d]
fun split_m (val p as MPerson) : Man =
match p with
~[ @gender[String], ~[val n], ~[val c] ] ->
man[ @name[n], split_children(c) ]
fun split_f (val p as FPerson) : Woman =
match p with
~[ @gender[String], ~[val n], ~[val c] ] ->
woman[ @name[n], split_children(c) ]
fun split_seq (val p as Person* ) : (Man|Woman)* =
filter p {
( val f as ~[ @gender["F"], ~[Any], ~[Any] ] { split_f(f) }
| val m as ~[ @gender["M"], ~[Any], ~[Any] ] { split_m(m) })*
}
let val _ =
match argv() with
val fn as String ->
( match load_xml(fn) with
doc[val p as Person*] -> doc[ split_seq(p) ]
| Any -> raise("Invalid document") )
| Any -> raise("Invalid command line")
cduce-0.6.0/cdo2cmo/ 0000775 0000000 0000000 00000000000 12305625535 0014134 5 ustar 00root root 0000000 0000000 cduce-0.6.0/cdo2cmo/.cvsignore 0000664 0000000 0000000 00000000037 12305625535 0016134 0 ustar 00root root 0000000 0000000 *.cmi
*.cmo
*.cmx
*.cma
*.cmxa
cduce-0.6.0/cduce-expat.spec 0000664 0000000 0000000 00000004256 12305625535 0015673 0 ustar 00root root 0000000 0000000 Summary: a language for fast and type safe processing of XML documents.
Name: cduce
Version: 0.1.0
Release: 1
URL: http://www.cduce.org/
Source : http://www.cduce.org/download/%{name}-%{version}.tar.gz
License: MIT
Group: Development/Languages
BuildRoot: %{_tmppath}/%{name}-root
Requires: ocaml >= 3.06
Requires: findlib >= 0.8
Requires: pcre-ocaml
Requires: ocamlnet >= 0.96
Requires: pxp >= 1.1.9
Requires: expat >= 1.95.6
%description
CDuce, is a functional language for fast and type safe
processing of XML documents.
A complete documentation, reference manual, tutorial,
technical articles on implementation and theoretical
issues, benchmarks, source code, mailing lists and forums
can be found on the CDuce website: http://www.cduce.org.
%prep
rm -rf $RPM_BUILD_ROOT
%setup -q
%build
cd expat
make all
make install
cd ..
make cduce dtd2cduce webpages EXPAT=true PHP=false NATIVE=true PXP_WLEX=false
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_bindir}
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
install -s -m 755 cduce $RPM_BUILD_ROOT%{_bindir}/cduce
install -s -m 755 dtd2cduce $RPM_BUILD_ROOT%{_bindir}/dtd2cduce
install -m 644 doc/cduce.1 $RPM_BUILD_ROOT%{_mandir}/man1/cduce.1
%post
cd %{_docdir}/%{name}-%{version}/www
ln -s ../img ./
cd ..
ln -s www/manual.html ./
%postun
rm -rf %{_docdir}/%{name}-%{version}
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
%doc README CHANGES web/www web/img
%{_bindir}/cduce
%{_bindir}/dtd2cduce
%{_mandir}/man1/cduce.1*
%changelog
* Mon Sep 1 2003 Giuseppe Castagna
0.1.1
* Various bug fixes (expat might now work)
* Sequencing operator e1;e2 (equivalent to: let [] = e1 in e2)
* Encoded references
* Fri Jul 4 2003 Giuseppe Castagna
0.1.0
* Support for XML Namespaces
* Better support for expat; clean Makefile
* Get rid of ;; and let fun in examples
* Optional ; for record in attribute position (values and types/patterns)
* Split --dump into --load and --save
* Better handling of strings (specific node in AST)
* Map, transform: tail-recursive implementation
* Preliminary support for XML Schema
* Various bug fixes
cduce-0.6.0/cduce.spec 0000664 0000000 0000000 00000004244 12305625535 0014551 0 ustar 00root root 0000000 0000000 Summary: a language for fast and type safe processing of XML documents.
Name: cduce
Version: 0.4.0
Release: 1
URL: http://www.cduce.org/
Source: cduce-%{version}.tar.gz
License: MIT
Group: Development/Languages
BuildRoot: %{_tmppath}/%{name}-root
Requires: pcre >= 4.5
%description
CDuce is a functional language for fast and type safe
processing of XML documents.
A complete documentation, reference manual, tutorial,
technical articles on implementation and theoretical
issues, benchmarks, source code, mailing lists and forums
can be found on the CDuce website: http://www.cduce.org.
%prep
%setup -D -q
cat > find_requires.sh << EOF
#!/bin/sh
/usr/lib/rpm/find-requires | fgrep -v libpcre.so.3
exit 0
EOF
chmod +x find_requires.sh
%define __find_requires %_builddir/%name-%version/find_requires.sh
%build
./configure --without-expat --without-curl --with-ocamlopt
make
%install
rm -rf %{buildroot}
make install_bin BINDIR=%{buildroot}%{_bindir}
make install_doc MANDIR=%{buildroot}%{_mandir} DOCDIR=%{buildroot}%{_docdir}/cduce
%post
[ -a /lib/libpcre.so.3 -o -a /usr/lib/libpcre.so.3 ] || {
{ { LIBPCRE0=/lib/libpcre.so.0 && [ -a $LIBPCRE0 ]; } ||
{ LIBPCRE0=/usr/lib/libpcre.so.0 && [ -a $LIBPCRE0 ]; }
} && ln -s $LIBPCRE0 /usr/lib/libpcre.so.3
}
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root)
%{_docdir}/cduce
%{_bindir}/cduce
%{_bindir}/dtd2cduce
%{_mandir}/man1/*cduce.1*
%changelog
* Fri Apr 7 2006 Nils Gesbert 0.4.0
Updated the spec file for cduce 0.4.0
* Mon Sep 1 2003 Giuseppe Castagna
0.1.1
* Various bug fixes (expat might now work)
* Sequencing operator e1;e2 (equivalent to: let [] = e1 in e2)
* Encoded references
* Fri Jul 4 2003 Giuseppe Castagna
0.1.0
* Support for XML Namespaces
* Better support for expat; clean Makefile
* Get rid of ;; and let fun in examples
* Optional ; for record in attribute position (values and types/patterns)
* Split --dump into --load and --save
* Better handling of strings (specific node in AST)
* Map, transform: tail-recursive implementation
* Preliminary support for XML Schema
* Various bug fixes
cduce-0.6.0/cduce_mktop 0000775 0000000 0000000 00000001457 12305625535 0015040 0 ustar 00root root 0000000 0000000 #!/bin/sh
FLAGS=
LINK=
NATIVE=true
while true; do
case "$1" in
-I)
FLAGS="$FLAGS -I $2"
shift
shift
;;
-p)
FLAGS="$FLAGS -I `ocamlfind query $2`"
LINK="$LINK -package $2"
shift
shift
;;
-l)
LINK="$LINK $2"
shift
shift
;;
-byte)
NATIVE=false
shift
;;
*)
break
;;
esac
done
TARG=$1
PRIMS=$2
if [ "${TARG}" = "" ] || [ "${PRIMS}" = "" ]; then
echo "Usage: cduce_mktop [(-I path | -p package | -l unit.cmo/cma/cmx/cmxa) ...] "
exit 2
fi
if [ ${NATIVE} = "true" ]; then
CAML=ocamlopt
else
CAML=ocamlc
fi
echo "Effective flags for CDuce: $FLAGS"
echo "Effective flags for OCaml: $LINK"
exec ocamlfind $CAML -package cduce -o $TARG $FLAGS -linkpkg -pp "cduce --topstub $FLAGS" $LINK -impl $PRIMS
cduce-0.6.0/compile/ 0000775 0000000 0000000 00000000000 12305625535 0014236 5 ustar 00root root 0000000 0000000 cduce-0.6.0/compile/.cvsignore 0000664 0000000 0000000 00000000026 12305625535 0016234 0 ustar 00root root 0000000 0000000 *.cmi
*.cmo
*.cmx
*.o
cduce-0.6.0/compile/auto_opt.ml 0000664 0000000 0000000 00000007657 12305625535 0016441 0 ustar 00root root 0000000 0000000 open Ident
open Patterns.Compile
type node = ptr ref
and ptr = Disp of descr | Link of node
and descr = { disp: dispatcher; mutable minimized: bool }
let rec repr n = match !n with Disp _ -> n | Link n -> repr n
let descr n = match !n with Disp d -> d | _ -> assert false
let log = ref []
let link n1 n2 = log := (n1, !n1) :: !log; n1 := Link n2
let backtrack n0 =
let rec aux = function
| (n,d)::rest -> n := d; if (n != n0) then aux rest else log := rest
| _ -> assert false
in
aux !log
let nodes = Hashtbl.create 64
let node_of d =
try Hashtbl.find nodes (id d)
with Not_found ->
let n = ref (Disp { disp = d; minimized = false }) in
Hashtbl.add nodes (id d) n;
n
exception Not_equal
let rec check_equal_nodes n1 n2 =
let n1 = repr n1 and n2 = repr n2 in
if (n1 != n2) then (
let d1 = descr n1 and d2 = descr n2 in
if d1.minimized && d2.minimized then raise Not_equal;
let n1,n2 = if d1.minimized then (n2,n1) else (n1,n2) in
link n1 n2;
try check_equal_actions (actions d1.disp) (actions d2.disp)
with Not_equal -> backtrack n1; raise Not_equal
)
and check_equal_actions a1 a2 = match a1,a2 with
| AIgnore r1, AIgnore r2 -> check_equal_results r1 r2
| AKind k1, AKind k2 ->
(check_equal_basics k1.basic k2.basic;
check_equal_prods k1.prod k2.prod;
check_equal_prods k1.xml k2.xml;
match k1.record,k2.record with
| Some(RecLabel(l1,p1)), Some(RecLabel(l2,p2))
when Label.equal l1 l2 ->
check_equal_prods p1 p2
| Some(RecNolabel (a1,b1)), Some(RecNolabel (a2,b2)) ->
check_equal_result_options a1 a2;
check_equal_result_options b1 b2;
| None, None -> ()
| _ -> raise Not_equal)
| _ -> raise Not_equal
and check_equal_result_options a1 a2 = match a1,a2 with
| Some r1, Some r2 -> check_equal_results r1 r2
| None, None -> ()
| _ -> raise Not_equal
and check_equal_prods a1 a2 = match a1,a2 with
| Dispatch (d1,r1), Dispatch (d2,r2) when Array.length r1 = Array.length r2 ->
check_equal_disps d1 d2;
Array.iteri (fun i x -> check_equal_prod2 x r2.(i)) r1
| TailCall d1, TailCall d2 -> check_equal_disps d1 d2
| Ignore c1, Ignore c2 -> check_equal_prod2 c1 c2
| Impossible, Impossible -> ()
| _ -> raise Not_equal
and check_equal_prod2 a1 a2 = match a1,a2 with
| Dispatch (d1,r1), Dispatch (d2,r2) when Array.length r1 = Array.length r2 ->
check_equal_disps d1 d2;
Array.iteri (fun i x -> check_equal_results x r2.(i)) r1
| TailCall d1, TailCall d2 -> check_equal_disps d1 d2
| Ignore c1, Ignore c2 -> check_equal_results c1 c2
| Impossible, Impossible -> ()
| _ -> raise Not_equal
and check_equal_disps d1 d2 =
if d1 == d2 then ()
else check_equal_nodes (node_of d1) (node_of d2)
and check_equal_results (c1,s1,p1) (c2,s2,p2) =
if (c1 != c2) || (p1 != p2) || (Array.length s1 != Array.length s2)
then raise Not_equal;
Array.iteri (fun i x -> check_equal_source x s2.(i)) s1
and check_equal_source s1 s2 = if (s1 != s2) then match s1,s2 with
| Const c1, Const c2 when Types.Const.equal c1 c2 -> ()
| Stack i1, Stack i2 when i1 == i2 -> ()
| Recompose (i1,j1), Recompose (i2,j2) when i1 == i2 && j1 == j2 -> ()
| _ -> raise Not_equal
and check_equal_basics a1 a2 =
if (List.length a1 != List.length a2) then raise Not_equal;
List.iter2 (fun (t1,r1) (t2,r2) ->
if not (Types.equiv t1 t2) then raise Not_equal;
check_equal_results r1 r2) a1 a2
let equal_nodes n1 n2 =
try check_equal_nodes n1 n2; true
with Not_equal -> false
let minimized = ref []
let rec auto d =
let n = node_of d in
if not (List.exists (equal_nodes n) !minimized) then
let n = repr n in
(descr n).minimized <- true;
minimized := n :: !minimized;
iter_disp_actions auto (actions d)
let make_branches t brs =
let d,r = make_branches t brs in
auto d;
d,r
let () =
Stats.register Stats.Summary
(fun ppf ->
Format.fprintf ppf
"Number of minimized states:%i@."
(List.length !minimized));
cduce-0.6.0/compile/auto_opt.mli 0000664 0000000 0000000 00000000162 12305625535 0016572 0 ustar 00root root 0000000 0000000 open Patterns
open Patterns.Compile
val make_branches : Types.t -> (node * 'a) list -> dispatcher * 'a rhs array
cduce-0.6.0/compile/auto_pat.ml 0000664 0000000 0000000 00000001636 12305625535 0016412 0 ustar 00root root 0000000 0000000 (* The automata for pattern matching *)
open Ident
type source =
| Catch | Const of Types.const
| Stack of int | Left | Right | Nil | Recompose of int * int
type result = int * source array * int
(* Return code, result values, number of values to pop *)
type actions =
| AIgnore of result
| AKind of actions_kind
and actions_kind = {
basic: (Types.t * result) list;
atoms: result Atoms.map;
chars: result Chars.map;
prod: result dispatch dispatch;
xml: result dispatch dispatch;
record: record option;
}
and record =
| RecLabel of label * result dispatch dispatch
| RecNolabel of result option * result option
and 'a dispatch =
| Dispatch of state * 'a array
| TailCall of state
| Ignore of 'a
| Impossible
and state = {
uid : int;
arity : int array;
mutable actions: actions;
mutable fail_code: int;
mutable expected_type: string;
}
type 'a rhs = Match of int * 'a | Fail
cduce-0.6.0/compile/auto_pat.mli 0000664 0000000 0000000 00000001636 12305625535 0016563 0 ustar 00root root 0000000 0000000 (* The automata for pattern matching *)
open Ident
type source =
| Catch | Const of Types.const
| Stack of int | Left | Right | Nil | Recompose of int * int
type result = int * source array * int
(* Return code, result values, number of values to pop *)
type actions =
| AIgnore of result
| AKind of actions_kind
and actions_kind = {
basic: (Types.t * result) list;
atoms: result Atoms.map;
chars: result Chars.map;
prod: result dispatch dispatch;
xml: result dispatch dispatch;
record: record option;
}
and record =
| RecLabel of label * result dispatch dispatch
| RecNolabel of result option * result option
and 'a dispatch =
| Dispatch of state * 'a array
| TailCall of state
| Ignore of 'a
| Impossible
and state = {
uid : int;
arity : int array;
mutable actions: actions;
mutable fail_code: int;
mutable expected_type: string;
}
type 'a rhs = Match of int * 'a | Fail
cduce-0.6.0/compile/compile.ml 0000664 0000000 0000000 00000022424 12305625535 0016224 0 ustar 00root root 0000000 0000000 open Ident
open Lambda
type env = {
cu: Compunit.t option; (* None: toplevel *)
vars: var_loc Env.t;
stack_size: int;
max_stack: int ref;
global_size: int
}
let global_size env = env.global_size
let mk cu = { cu = cu; vars = Env.empty; stack_size = 0; max_stack = ref 0; global_size = 0 }
let empty_toplevel = mk None
let empty x = mk (Some x)
let find x env =
try Env.find x env.vars
with Not_found ->
failwith ("Compile: cannot find " ^ (Ident.to_string x))
let find_slot x env =
match find x env with
| Ext (_,slot) -> slot
| _ -> assert false
let from_comp_unit = ref (fun cu -> assert false)
let find_ext cu x =
let env = !from_comp_unit cu in
find x env
let enter_local env x =
let new_size = env.stack_size + 1 in
if new_size > !(env.max_stack) then (env.max_stack) := new_size;
{ env with
vars = Env.add x (Local env.stack_size) env.vars;
stack_size = new_size }
let enter_global_toplevel env x =
{ env with
vars = Env.add x (Global env.global_size) env.vars;
global_size = env.global_size + 1 }
let enter_global_cu cu env x =
{ env with
vars = Env.add x (Ext (cu,env.global_size)) env.vars;
global_size = env.global_size + 1 }
let rec compile env e = compile_aux env e.Typed.exp_descr
and compile_aux env = function
| Typed.Forget (e,_) -> compile env e
| Typed.Check (t0,e,t) ->
let d = Patterns.Compile.make_checker !t0 (Types.descr t) in
Check (compile env e, d)
| Typed.Var x -> Var (find x env)
| Typed.ExtVar (cu,x,_) -> Var (find_ext cu x)
| Typed.Apply (e1,e2) -> Apply (compile env e1, compile env e2)
| Typed.Abstraction a -> compile_abstr env a
| Typed.Cst c -> Const (Value.const c)
| Typed.Pair (e1,e2) -> Pair(compile env e1, compile env e2)
| Typed.Xml (e1, { Typed.exp_descr = Typed.Pair (e2,e3) }, None) ->
Xml (compile env e1, compile env e2, compile env e3)
| Typed.Xml (e1, { Typed.exp_descr = Typed.Pair (e2,e3) }, Some t) ->
XmlNs (compile env e1, compile env e2, compile env e3,t)
| Typed.Xml _ -> assert false
| Typed.RecordLitt r ->
let r = List.map (fun (l,e) -> (Upool.int l, compile env e))
(LabelMap.get r)
in
Record (Imap.create (Array.of_list r))
| Typed.String (i,j,s,q) -> String (i,j,s,compile env q)
| Typed.Match (e,brs) -> Match (compile env e, compile_branches env brs)
| Typed.Map (e,brs) -> Map (compile env e, compile_branches env brs)
| Typed.Transform (e,brs) -> Transform (compile env e, compile_branches env brs)
| Typed.Xtrans (e,brs) -> Xtrans (compile env e, compile_branches env brs)
| Typed.Validate (e,_,validator) -> Validate (compile env e, validator)
| Typed.RemoveField (e,l) -> RemoveField (compile env e,l)
| Typed.Dot (e,l) -> Dot (compile env e, l)
| Typed.Try (e,brs) -> Try (compile env e, compile_branches env brs)
| Typed.Ref (e,t) -> Ref (compile env e, t)
| Typed.External (t,`Ext i) ->
(match env.cu with
| Some cu -> Var (External (cu,i))
| None -> failwith "Cannot compile externals in the toplevel")
| Typed.External (t,`Builtin s) ->
Var (Builtin s)
| Typed.Op (op,_,args) ->
let rec aux = function
| [arg] -> [ compile env arg ]
| arg::l -> (compile env arg) :: (aux l)
| [] -> [] in
Op (op, aux args)
| Typed.NsTable (ns,e) ->
NsTable (ns, compile_aux env e)
and compile_abstr env a =
let fun_env =
match a.Typed.fun_name with
| Some x -> Env.add x (Env 0) Env.empty
| None -> Env.empty in
let (slots,nb_slots,fun_env) =
List.fold_left
(fun (slots,nb_slots,fun_env) x ->
match find x env with
| (Local _ | Env _) as p ->
p::slots,
succ nb_slots,
Env.add x (Env nb_slots) fun_env;
| Global _ | Ext _ | External _ | Builtin _ as p ->
slots,
nb_slots,
Env.add x p fun_env
| Dummy -> assert false
)
([Dummy],1,fun_env) (IdSet.get a.Typed.fun_fv) in
let slots = Array.of_list (List.rev slots) in
let env = { env with vars = fun_env; stack_size = 0; max_stack = ref 0 } in
let body = compile_branches env a.Typed.fun_body in
Abstraction (slots, a.Typed.fun_iface, body, !(env.max_stack))
and compile_branches env (brs : Typed.branches) =
(* Don't compile unused branches, because they have not been
type checked. *)
let used = List.filter (fun br -> br.Typed.br_used) brs.Typed.br_branches in
let b = List.map (compile_branch env) used in
let (disp,rhs) = Patterns.Compile.make_branches brs.Typed.br_typ b in
{ brs_stack_pos = env.stack_size;
brs_accept_chars = not (Types.Char.is_empty brs.Typed.br_accept);
brs_disp = disp;
brs_rhs = rhs }
and compile_branch env br =
let env = List.fold_left enter_local env (Patterns.fv br.Typed.br_pat) in
(br.Typed.br_pat, compile env br.Typed.br_body)
let enter_globals env n = match env.cu with
| None -> List.fold_left enter_global_toplevel env n
| Some cu -> List.fold_left (enter_global_cu cu) env n
let compile_expr env e =
let env = { env with max_stack = ref 0; stack_size = 0 } in
let e = compile env e in
(e,!(env.max_stack))
let compile_let_decl env decl =
let pat = decl.Typed.let_pat in
let e,lsize = compile_expr env decl.Typed.let_body in
let env = enter_globals env (Patterns.fv pat) in
let te = decl.Typed.let_body.Typed.exp_typ in
let comp = Patterns.Compile.make_branches te [ pat, () ] in
let (disp, n) =
match comp with
| (disp, [| Auto_pat.Match (n, ()) |]) -> (disp,n)
| _ -> assert false in
(env, [ LetDecls (e,lsize,disp,n) ])
let compile_rec_funs env funs =
let fun_name = function
| { Typed.exp_descr=Typed.Abstraction{Typed.fun_name = Some x}} -> x
| _ -> assert false in
let fun_a env e =
let e,lsize = compile_expr env e in
LetDecl (e,lsize) in
let env = enter_globals env (List.map fun_name funs) in
let code= List.map (fun_a env) funs in
(env, code)
(****************************************)
open Cduce_loc
let eval ~run ~show (tenv,cenv,codes) e =
let (e,t) = Typer.type_expr tenv e in
let e,lsize = compile_expr cenv e in
if run then
let v = Eval.expr e lsize in
show None t (Some v)
else
show None t None;
(tenv,cenv, Eval (e,lsize) :: codes)
let run_show ~run ~show tenv cenv codes ids =
if run then
let () = Eval.eval_toplevel codes in
List.iter
(fun (id,_) -> show (Some id)
(Typer.find_value id tenv)
(Some (Eval.eval_var (find id cenv)))) ids
else
List.iter
(fun (id,_) -> show (Some id)
(Typer.find_value id tenv)
None) ids
let let_decl ~run ~show (tenv,cenv,codes) p e =
let (tenv,decl,ids) = Typer.type_let_decl tenv p e in
let (cenv,code) = compile_let_decl cenv decl in
run_show ~run ~show tenv cenv code ids;
(tenv,cenv,List.rev_append code codes)
let let_funs ~run ~show (tenv,cenv,codes) funs =
let (tenv,funs,ids) = Typer.type_let_funs tenv funs in
let (cenv,code) = compile_rec_funs cenv funs in
run_show ~run ~show tenv cenv code ids;
(tenv,cenv,List.rev_append code codes)
let type_defs (tenv,cenv,codes) typs =
let tenv = Typer.type_defs tenv typs in
(tenv,cenv,codes)
let namespace (tenv,cenv,codes) loc pr ns =
let tenv = Typer.type_ns tenv loc pr ns in
(tenv,cenv,codes)
let keep_ns (tenv,cenv,codes) k =
let tenv = Typer.type_keep_ns tenv k in
(tenv,cenv,codes)
let schema (tenv,cenv,codes) loc x sch =
let tenv = Typer.type_schema tenv loc x sch in
(tenv,cenv,codes)
let using (tenv,cenv,codes) loc x cu =
let tenv = Typer.type_using tenv loc x cu in
(tenv,cenv,codes)
let do_open (tenv,cenv,codes) loc path =
let tenv = Typer.type_open tenv loc path in
(tenv,cenv,codes)
let rec collect_funs accu = function
| { descr = Ast.FunDecl e } :: rest -> collect_funs (e::accu) rest
| rest -> (List.rev accu,rest)
let rec collect_types accu = function
| { descr = Ast.TypeDecl ((loc,x),t) } :: rest ->
collect_types ((loc,x,t) :: accu) rest
| rest -> (accu,rest)
let rec phrases ~run ~show ~directive =
let rec loop accu phs =
match phs with
| { descr = Ast.FunDecl _ } :: _ ->
let (funs,rest) = collect_funs [] phs in
loop (let_funs ~run ~show accu funs) rest
| { descr = Ast.TypeDecl (_,_) } :: _ ->
let (typs,rest) = collect_types [] phs in
loop (type_defs accu typs) rest
| { descr = Ast.SchemaDecl (name, uri); loc = loc } :: rest ->
loop (schema accu loc name uri) rest
| { descr = Ast.Namespace (pr,ns); loc = loc } :: rest ->
loop (namespace accu loc pr ns) rest
| { descr = Ast.KeepNs b } :: rest ->
loop (keep_ns accu b) rest
| { descr = Ast.Using (x,cu); loc = loc } :: rest ->
loop (using accu loc x cu) rest
| { descr = Ast.Open path; loc = loc } :: rest ->
loop (do_open accu loc path) rest
| { descr = Ast.EvalStatement e } :: rest ->
loop (eval ~run ~show accu e) rest
| { descr = Ast.LetDecl (p,e) } :: rest ->
loop (let_decl ~run ~show accu p e) rest
| { descr = Ast.Directive d } :: rest ->
let (tenv,cenv,_) = accu in
directive tenv cenv d;
loop accu rest
| [] ->
accu
in
loop
let comp_unit ?(run=false)
?(show=fun _ _ _ -> ())
?(directive=fun _ _ _ -> ()) tenv cenv phs =
let (tenv,cenv,codes) = phrases ~run ~show ~directive (tenv,cenv,[]) phs in
(tenv,cenv,List.rev codes)
let compile_eval_expr env e =
let e,lsize = compile_expr env e in
Eval.expr e lsize
cduce-0.6.0/compile/compile.mli 0000664 0000000 0000000 00000001112 12305625535 0016364 0 ustar 00root root 0000000 0000000 (* From Ast to Lambda. *)
open Ident
open Lambda
type env
val global_size: env -> int
val empty : Compunit.t -> env
val empty_toplevel : env
val find : id -> env -> var_loc
val find_slot : id -> env -> int
val compile_eval_expr : env -> Typed.texpr -> Value.t
val comp_unit:
?run:bool ->
?show:(id option -> Types.t -> Value.t option -> unit) ->
?directive:(Typer.t -> env -> Ast.toplevel_directive -> unit) ->
Typer.t -> env -> Ast.pmodule_item list ->
Typer.t * env * Lambda.code_item list
val from_comp_unit: (Compunit.t -> env) ref
(* Defined in Librarian *)
cduce-0.6.0/compile/lambda.ml 0000664 0000000 0000000 00000003624 12305625535 0016015 0 ustar 00root root 0000000 0000000 (* Representation of programs used by the runtime evaluator.
Similar to the typed abstract syntax tree representation, but:
- the pattern matching is compiled;
- the identifiers locations are resolved. *)
open Ident
type var_loc =
| Local of int
(* Slot in the table of locals *)
| Env of int
(* Slot in the environment *)
| Ext of Compunit.t * int
(* Global slot from a given compilation unit *)
(* If pos < 0, the first arg is the value *)
| External of Compunit.t * int
(* OCaml External *)
(* If pos < 0, the first arg is the value *)
| Builtin of string
(* OCaml external embedded in the runtime *)
| Global of int
(* Only for the toplevel *)
| Dummy
type expr =
| Var of var_loc
| Apply of expr * expr
| Abstraction of var_loc array * (Types.t * Types.t) list * branches * int
(* environment, interface, branches, size of locals *)
| Check of expr * Auto_pat.state
| Const of Value.t
| Pair of expr * expr
| Xml of expr * expr * expr
| XmlNs of expr * expr * expr * Ns.table
| Record of expr Imap.t
| String of U.uindex * U.uindex * U.t * expr
| Match of expr * branches
| Map of expr * branches
| Transform of expr * branches
| Xtrans of expr * branches
| Try of expr * branches
| Validate of expr * Schema_validator.t
| RemoveField of expr * label
| Dot of expr * label
| Ref of expr * Types.Node.t
| Op of string * expr list
| OpResolved of (Value.t list -> Value.t) * expr list
| NsTable of Ns.table * expr
and branches = {
brs_accept_chars: bool;
brs_disp: Auto_pat.state;
brs_rhs: expr Auto_pat.rhs array;
brs_stack_pos: int
}
type code_item =
| Eval of expr * int
(* expression, size of locals *)
| LetDecls of expr * int * Auto_pat.state * int
(* expression, size of locals, dispatcher, number of globals to set *)
| LetDecl of expr * int
type code = code_item list
cduce-0.6.0/compile/lambda.mli 0000664 0000000 0000000 00000003624 12305625535 0016166 0 ustar 00root root 0000000 0000000 (* Representation of programs used by the runtime evaluator.
Similar to the typed abstract syntax tree representation, but:
- the pattern matching is compiled;
- the identifiers locations are resolved. *)
open Ident
type var_loc =
| Local of int
(* Slot in the table of locals *)
| Env of int
(* Slot in the environment *)
| Ext of Compunit.t * int
(* Global slot from a given compilation unit *)
(* If pos < 0, the first arg is the value *)
| External of Compunit.t * int
(* OCaml External *)
(* If pos < 0, the first arg is the value *)
| Builtin of string
(* OCaml external embedded in the runtime *)
| Global of int
(* Only for the toplevel *)
| Dummy
type expr =
| Var of var_loc
| Apply of expr * expr
| Abstraction of var_loc array * (Types.t * Types.t) list * branches * int
(* environment, interface, branches, size of locals *)
| Check of expr * Auto_pat.state
| Const of Value.t
| Pair of expr * expr
| Xml of expr * expr * expr
| XmlNs of expr * expr * expr * Ns.table
| Record of expr Imap.t
| String of U.uindex * U.uindex * U.t * expr
| Match of expr * branches
| Map of expr * branches
| Transform of expr * branches
| Xtrans of expr * branches
| Try of expr * branches
| Validate of expr * Schema_validator.t
| RemoveField of expr * label
| Dot of expr * label
| Ref of expr * Types.Node.t
| Op of string * expr list
| OpResolved of (Value.t list -> Value.t) * expr list
| NsTable of Ns.table * expr
and branches = {
brs_accept_chars: bool;
brs_disp: Auto_pat.state;
brs_rhs: expr Auto_pat.rhs array;
brs_stack_pos: int
}
type code_item =
| Eval of expr * int
(* expression, size of locals *)
| LetDecls of expr * int * Auto_pat.state * int
(* expression, size of locals, dispatcher, number of globals to set *)
| LetDecl of expr * int
type code = code_item list
cduce-0.6.0/compile/operators.ml 0000664 0000000 0000000 00000003214 12305625535 0016606 0 ustar 00root root 0000000 0000000 open Cduce_loc
type type_fun = Types.t -> bool -> Types.t
let register op arity typ eval =
Typer.register_op op arity typ;
Eval.register_op op eval
let register_unary op typ eval =
register op 1
(function
| [ tf ] ->
typ tf
| _ ->
raise (Typer.Error (
("Built-in operator " ^ op ^ " needs exactly one argument")))
)
(function
| [ v ] -> eval v
| _ -> assert false
)
let register_binary op typ eval =
register op 2
(function
| [ tf1; tf2 ] ->
typ tf1 tf2
| _ ->
raise (Typer.Error (
("Built-in operator " ^ op ^ " needs exactly two arguments")))
)
(function
| [ v1; v2 ] -> eval v1 v2
| _ -> assert false
)
let register_cst op t v =
register op 0
(function
| [ ] -> fun _ _ -> t
| _ -> assert false)
(function
| [ ] -> v
| _ -> assert false
)
let register_fun op dom codom eval =
register_cst op
(Types.arrow (Types.cons dom) (Types.cons codom))
(Value.Abstraction (Some [(dom,codom)],eval))
let register_fun2 op dom1 dom2 codom eval =
let t2 = Types.arrow (Types.cons dom2) (Types.cons codom) in
let iface2 = Some [(dom2,codom)] in
register_cst op
(Types.arrow (Types.cons dom1) (Types.cons t2))
(Value.Abstraction (Some [(dom1,t2)],(fun v1 ->
Value.Abstraction (iface2,
eval v1))))
let register_op op ?(expect=Types.any) typ eval =
register_unary op
(fun tf _ _ -> let t = tf expect true in typ t)
eval
let register_op2 op t1 t2 s eval =
register_binary op
(fun tf1 tf2 _ _ -> ignore (tf1 t1 false); ignore (tf2 t2 false); s)
eval
cduce-0.6.0/compile/operators.mli 0000664 0000000 0000000 00000001355 12305625535 0016763 0 ustar 00root root 0000000 0000000 open Cduce_loc
type type_fun = Types.t -> bool -> Types.t
val register:
string -> int -> (type_fun list -> type_fun) -> (Value.t list -> Value.t) -> unit
val register_unary:
string -> (type_fun -> type_fun) -> (Value.t -> Value.t) -> unit
val register_binary:
string -> (type_fun -> type_fun -> type_fun) -> (Value.t -> Value.t -> Value.t) -> unit
val register_fun: string -> Types.t -> Types.t -> (Value.t -> Value.t) -> unit
val register_fun2: string -> Types.t -> Types.t -> Types.t -> (Value.t -> Value.t -> Value.t) -> unit
val register_op:
string -> ?expect:Types.t -> (Types.t -> Types.t) -> (Value.t -> Value.t) -> unit
val register_op2:
string -> Types.t -> Types.t -> Types.t -> (Value.t -> Value.t -> Value.t) -> unit
cduce-0.6.0/compile/print_auto.ml 0000664 0000000 0000000 00000007351 12305625535 0016762 0 ustar 00root root 0000000 0000000 open Auto_pat
open Ident
let queue = ref []
let printed = Hashtbl.create 1024
let rec_state ppf d =
Format.fprintf ppf "disp_%i" d.uid;
queue := d :: !queue
let rec print_source lhs ppf = function
| Catch -> Format.fprintf ppf "v"
| Const c -> Types.Print.print_const ppf c
| Nil -> Format.fprintf ppf "`nil"
| Left -> Format.fprintf ppf "v1"
| Right -> Format.fprintf ppf "v2"
| Stack i -> Format.fprintf ppf "%s" (List.nth lhs (i-1))
| Recompose (i,j) ->
Format.fprintf ppf "(%s,%s)"
(match i with (-1) -> "v1" | (-2) -> "nil"
| i -> List.nth lhs (i-1))
(match j with (-1) -> "v2" | (-2) -> "nil"
| j -> List.nth lhs (j-1))
let print_result lhs ppf =
Array.iteri
(fun i s ->
if i > 0 then Format.fprintf ppf ",";
print_source lhs ppf s;
)
let print_ret lhs ppf (code,ret,ar) =
Format.fprintf ppf "$%i" code;
if Array.length ret <> 0 then
Format.fprintf ppf "(%a)" (print_result lhs) ret
let print_ret_opt ppf = function
| None -> Format.fprintf ppf "*"
| Some r -> print_ret [] ppf r
let gen_lhs prefix d code =
let arity = d.arity.(code) in
let r = ref [] in
for i = 0 to arity - 1 do r := Format.sprintf "%s%i" prefix i :: !r done;
!r
let print_kind ppf actions =
let print_lhs ppf (code,lhs) =
Format.fprintf ppf "$%i(" code;
let rec aux = function
| [] -> ()
| [x] -> Format.fprintf ppf "%s" x
| x::r -> Format.fprintf ppf "%s,x" x; aux r
in aux lhs;
Format.fprintf ppf ")" in
let print_basic (t,ret) =
Format.fprintf ppf " | %a -> %a@\n"
Types.Print.print t
(print_ret []) ret
in
let print_prod2 lhs = function
| Impossible -> assert false
| Ignore r ->
Format.fprintf ppf "%a\n"
(print_ret lhs) r
| TailCall d ->
Format.fprintf ppf "%a v2@\n" rec_state d
| Dispatch (d, branches) ->
Format.fprintf ppf "@\n match %a v2 with@\n" rec_state d;
Array.iteri
(fun code r ->
let rhs = gen_lhs "r" d code in
Format.fprintf ppf " | %a -> %a@\n"
print_lhs (code,rhs)
(print_ret (rhs@lhs)) r;
)
branches
in
let print_prod prefix ppf = function
| Impossible -> ()
| Ignore d2 ->
Format.fprintf ppf " | %s(v1,v2) -> " prefix;
print_prod2 [] d2
| TailCall d ->
Format.fprintf ppf " | %s(v1,v2) -> %a v1@\n" prefix rec_state d
| Dispatch (d,branches) ->
Format.fprintf ppf " | %s(v1,v2) -> @\n" prefix;
Format.fprintf ppf " match %a v1 with@\n" rec_state d;
Array.iteri
(fun code d2 ->
let lhs = gen_lhs "l" d code in
Format.fprintf ppf " | %a -> " print_lhs (code,lhs);
print_prod2 lhs d2;
)
branches
in
let rec print_record_opt ppf = function
| None -> ()
| Some (RecLabel (l,d)) ->
print_prod ("record:"^(Label.string_of_attr l)) ppf d
| Some (RecNolabel (r1,r2)) ->
Format.fprintf ppf " | Record -> @\n";
Format.fprintf ppf " SomeField:%a;NoField:%a@\n"
print_ret_opt r1 print_ret_opt r2
in
List.iter print_basic actions.basic;
print_prod "" ppf actions.prod;
print_prod "XML" ppf actions.xml;
print_record_opt ppf actions.record
let print_actions ppf = function
| AKind k -> print_kind ppf k
| AIgnore r -> Format.fprintf ppf "v -> %a@\n" (print_ret []) r
let print_state_opt ppf d =
if Hashtbl.mem printed d.uid then ()
else (
Hashtbl.add printed d.uid ();
Format.fprintf ppf "State %i = function@\n" d.uid;
print_actions ppf d.actions;
Format.fprintf ppf "====================================@."
)
let print_state ppf d =
Hashtbl.clear printed;
queue := [ d ];
while !queue <> [] do
let d = List.hd !queue in
queue := List.tl !queue;
print_state_opt ppf d
done;
Hashtbl.clear printed
cduce-0.6.0/compile/print_auto.mli 0000664 0000000 0000000 00000000074 12305625535 0017126 0 ustar 00root root 0000000 0000000 val print_state: Format.formatter -> Auto_pat.state -> unit
cduce-0.6.0/configure 0000775 0000000 0000000 00000000042 12305625535 0014511 0 ustar 00root root 0000000 0000000 #! /bin/sh
ocaml configure.ml $@
cduce-0.6.0/configure.ml 0000664 0000000 0000000 00000021535 12305625535 0015127 0 ustar 00root root 0000000 0000000 (*
#use "topfind";;
#require "findlib";;
*)
open Printf
let not_distrib = Sys.file_exists "Makefile.distrib"
let usage () =
print_string "\
Configuration of CDuce.
Usage: ./configure [OPTION]...
Defaults for the options are specified in brackets.
Options:
--help display this help and exit
Optional features:
--with-FEATURE force support for FEATURE [default: autodetect]
--without-FEATURE disable support for FEATURE [default: autodetect]
Available features:
ocamlopt use ocamlopt instead of ocamlc to build CDuce
pxp_wlex use wlexers for parsing utf8 with PXP [default: false]
pxp support for the PXP XML parser
expat support for the expat XML parser
curl support for the libcurl library
netclient support for the netclient library
cgi support for the cgi library
OCaml/CDuce interface:
--mliface=DIR build the interface with the OCaml sources in DIR
Installation directories:
--prefix=PREFIX install files in PREFIX [/usr/local]
--bindir=DIR install user executables in DIR [PREFIX/bin]
--mandir=DIR install man documentation in DIR [PREFIX/man]
--docdir=DIR install the rest of the doc in DIR [PREFIX/doc/cduce]
";
if not_distrib then print_string "
--wprefix=WPREFIX root directory of the web-server [/var/www]
--cgidir=DIR install the cgi-bin interpreter in DIR [WPREFIX/cgi-bin]
--htmldir=DIR install the website in DIR [WPREFIX/html]
--sessiondir=DIR store the open sessions of the cgi-bin in DIR
[/tmp/cduce_sessions]
"
let features =
[ "ocamlopt", ref `auto;
"mliface", ref `auto;
"pxp", ref `auto;
"expat", ref `auto;
"curl", ref `auto;
"netclient", ref `auto;
"cgi", ref `auto;
"pxp_wlex", ref `no ]
let vars =
[ "prefix", ref "/usr/local";
"bindir", ref "";
"mandir", ref "";
"docdir", ref "";
"wprefix", ref "/var/www";
"cgidir", ref "";
"htmldir", ref "";
"sessiondir", ref "/tmp/cduce_sessions";
"mliface", ref ""
]
let src_dirs = ["/usr/src"; "/usr/local/src"; "/tmp"]
let fatal s = printf "*** Fatal error: %s\n" s; exit 1
let warning s = printf "* Warning: %s\n" s
let log s =
let oc = open_out_gen [ Open_append; Open_creat ] 0o600 "configure.log" in
output_string oc s;
output_char oc '\n';
close_out oc;
flush stdout
let command s =
log ("==> " ^ s);
Sys.command (sprintf "%s 2>> configure.log" s) = 0
let start_with s p =
let ls = String.length s and lp = String.length p in
if (ls >= lp) && (String.sub s 0 lp = p)
then Some (String.sub s lp (ls - lp)) else None
let parse_arg s =
if s = "--help" then (usage (); exit 0)
else
match start_with s "--with-" with
| Some f -> (List.assoc f features) := `yes
| None ->
match start_with s "--without-" with
| Some f -> (List.assoc f features) := `no
| None ->
let i = String.index s '=' in
if i < 2 then raise Not_found;
let n = String.sub s 2 (i - 2) in
let v = String.sub s (succ i) (String.length s - i - 1) in
(List.assoc n vars) := v
let () =
print_endline "Configuring CDuce for compilation...\n";
(try for i = 1 to Array.length Sys.argv - 1 do parse_arg Sys.argv.(i) done
with Not_found -> usage (); fatal "Incorrect command line");
(try Sys.remove "configure.log" with Sys_error _ -> ());
ignore (Sys.command "uname -a >> configure.log")
let print s = print_string s; flush stdout
let check_feature f p =
printf "%s: " f;
match !(List.assoc f features) with
| `no ->
print "disabled\n"; false
| `yes ->
print "checking... ";
if p ()
then (print "ok\n"; true)
else (print "failed !\n"; fatal "Required feature is not available")
| `auto ->
print "autodetecting... ";
if p ()
then (print "enabled\n"; true)
else (print "disabled\n"; false)
let native =
check_feature "ocamlopt" (fun () -> command "ocamlfind ocamlopt")
let check_pkg p () =
try
(* ignore (Findlib.package_property
[ (if native then "native" else "bytecode") ]
p "archive"); *)
command
(sprintf
"ocamlfind ocaml%s -package %s -linkpkg -o configure.try && rm -f configure.try"
(if native then "opt" else "c")
p)
with Not_found -> false
let need_pkg p =
printf "Checking for package %s... " p; flush stdout;
if not (check_pkg p ())
then (print "failed !\n"; fatal "Required package is not available")
else (print "ok\n")
let dir ?def d =
let s = !(List.assoc d vars) in
if s <> "" then s
else match def with
| Some x -> x
| None -> fatal (sprintf "%s cannot be empty" d)
let exe = match Sys.os_type with
| "Win32" ->
print "Win32 detected... executable will have .exe extension\n"; ".exe"
| "Cygwin" ->
print "Cygwin detected... executable will have .exe extension\n"; ".exe"
| _ -> ""
let add_icon = match Sys.os_type with
| "Win32" | "Cygwin" -> true
| _ -> false
let check_mliface dir =
(* Sys.file_exists (Filename.concat dir "typing/types.ml") *)
Sys.file_exists (Filename.concat dir "typing/types.ml")
let ocaml_stdlib () =
if (Sys.command "ocamlc -where > ocaml_stdlib" <> 0) then
fatal "Can't run ocamlc to get OCaml standard library path";
let ic = open_in "ocaml_stdlib" in
let s = input_line ic in
close_in ic;
Sys.remove "ocaml_stdlib";
s
let make_absolute dir =
if Filename.is_relative dir
then Filename.concat (Sys.getcwd ()) dir
else dir
let ml_interface =
let dir1 = !(List.assoc "mliface" vars) in
let dirs = if dir1 = "" then [] else [ make_absolute dir1 ] in
print "ocaml sources... ";
let rec loop = function
| [] ->
print "not found (the interface will not be built)\n";
None
| d::dirs ->
if check_mliface d then
(print ("found: " ^ d ^ "\n"); Some d)
else loop dirs
in
loop dirs
let pxp = check_feature "pxp" (check_pkg "pxp")
let expat = check_feature "expat" (check_pkg "expat")
let curl = check_feature "curl" (check_pkg "curl")
let netclient = check_feature "netclient" (check_pkg "netclient")
let cgi = check_feature "cgi" (check_pkg "netcgi1")
let pxp_wlex = check_feature "pxp_wlex" (check_pkg "pxp-wlex-utf8")
let prefix = dir "prefix"
let bindir = dir ~def:(prefix^"/bin") "bindir"
let mandir = dir ~def:(prefix^"/man") "mandir"
let docdir = dir ~def:(prefix^"/doc/cduce") "docdir"
let wprefix = dir "wprefix"
let cgidir = dir ~def:(wprefix^"/cgi-bin") "cgidir"
let htmldir = dir ~def:(wprefix^"/html") "htmldir"
let sessiondir = dir "sessiondir"
let curl,netclient =
match curl,netclient with
| true,true ->
warning "Both netclient and curl are available. Will use curl.";
true,false
| false,false ->
warning "No package for loading external URLs.";
false,false
| c,n -> c,n
let pxp,expat =
match pxp,expat with
| true,true ->
warning "Both PXP and expat are available. Will build both and use expat by default.";
true,true
| false,false ->
warning "No package for parsing XML documents.";
false,false
| c,n -> c,n
let cgi =
if not(cgi) then
(warning "No cgi package found: dtd2cduce and the web interface won't be built";
false)
else true
let required_packages = ["camlp4"; "num"; "pcre"; "ulex"; "netstring"]
let has_forpack =
print "testing for -for-pack option: ";
let comm =
match Sys.os_type with
| "Win32" -> "ocamlc -for-pack foo"
| _ -> "ocamlc -for-pack foo 2> /dev/null" in
if Sys.command comm = 0 then
(print "available\n"; true)
else
(print "not available\n"; false)
let has_natdynlink =
print "testing for native dynlink: ";
if Sys.command "ocamlopt -o foo dynlink.cmxa && rm -f foo" = 0 then
(printf "available\n"; true)
else
(print "not available\n"; false)
let () =
List.iter need_pkg required_packages;
if pxp then (
need_pkg "pxp-engine";
need_pkg "pxp-lex-iso88591";
if not pxp_wlex then need_pkg "pxp-lex-utf8";
);
print "Creating Makefile.conf...\n";
let out = open_out "Makefile.conf" in
fprintf out "# This file has been generated by the configure script\n";
fprintf out "NATIVE=%b\n" native;
(match ml_interface with
| Some d -> fprintf out "ML_INTERFACE=true\nOCAML_SRC=%s\n" d
| None -> fprintf out "ML_INTERFACE=false\n");
fprintf out "PXP=%b\n" pxp;
fprintf out "EXPAT=%b\n" expat;
fprintf out "CURL=%b\n" curl;
fprintf out "NETCLIENT=%b\n" netclient;
fprintf out "CGI=%b\n" cgi;
fprintf out "PXP_WLEX=%b\n" pxp_wlex;
fprintf out "BINDIR=%s\n" bindir;
fprintf out "MANDIR=%s\n" mandir;
fprintf out "DOCDIR=%s\n" docdir;
fprintf out "CGI_DIR=%s\n" cgidir;
fprintf out "HTML_DIR=%s\n" htmldir;
fprintf out "SESSION_DIR=%s\n" sessiondir;
fprintf out "EXE=%s\n" exe;
fprintf out "ADDICON=%b\n" add_icon;
fprintf out "PROFILE=false\n";
fprintf out "FORPACK=%b\n" has_forpack;
fprintf out "NATDYNLINK=%b\n" has_natdynlink;
close_out out
cduce-0.6.0/depend 0000664 0000000 0000000 00000057771 12305625535 0014011 0 ustar 00root root 0000000 0000000 driver/cduce_config.cmo: driver/cduce_config.cmi
driver/cduce_config.cmx: driver/cduce_config.cmi
misc/stats.cmo: misc/stats.cmi
misc/stats.cmx: misc/stats.cmi
misc/encodings.cmo: misc/custom.cmo misc/encodings.cmi
misc/encodings.cmx: misc/custom.cmx misc/encodings.cmi
misc/upool.cmo: misc/custom.cmo misc/upool.cmi
misc/upool.cmx: misc/custom.cmx misc/upool.cmi
misc/pretty.cmo: misc/pretty.cmi
misc/pretty.cmx: misc/pretty.cmi
misc/ns.cmo: misc/upool.cmi misc/encodings.cmi misc/custom.cmo misc/ns.cmi
misc/ns.cmx: misc/upool.cmx misc/encodings.cmx misc/custom.cmx misc/ns.cmi
misc/imap.cmo: misc/imap.cmi
misc/imap.cmx: misc/imap.cmi
misc/html.cmo: misc/html.cmi
misc/html.cmx: misc/html.cmi
types/compunit.cmo: types/compunit.cmi
types/compunit.cmx: types/compunit.cmi
types/sortedList.cmo: misc/custom.cmo types/sortedList.cmi
types/sortedList.cmx: misc/custom.cmx types/sortedList.cmi
misc/bool.cmo: misc/custom.cmo misc/bool.cmi
misc/bool.cmx: misc/custom.cmx misc/bool.cmi
types/ident.cmo: types/sortedList.cmi misc/ns.cmi misc/encodings.cmi
types/ident.cmx: types/sortedList.cmx misc/ns.cmx misc/encodings.cmx
types/intervals.cmo: types/intervals.cmi
types/intervals.cmx: types/intervals.cmi
types/chars.cmo: misc/custom.cmo types/chars.cmi
types/chars.cmx: misc/custom.cmx types/chars.cmi
types/atoms.cmo: misc/upool.cmi types/sortedList.cmi misc/ns.cmi \
misc/imap.cmi misc/encodings.cmi types/atoms.cmi
types/atoms.cmx: misc/upool.cmx types/sortedList.cmx misc/ns.cmx \
misc/imap.cmx misc/encodings.cmx types/atoms.cmi
types/normal.cmo: types/normal.cmi
types/normal.cmx: types/normal.cmi
types/types.cmo: misc/stats.cmi types/sortedList.cmi misc/pretty.cmi \
misc/ns.cmi types/normal.cmi types/intervals.cmi types/ident.cmo \
misc/encodings.cmi misc/custom.cmo types/compunit.cmi types/chars.cmi \
misc/bool.cmi types/atoms.cmi types/types.cmi
types/types.cmx: misc/stats.cmx types/sortedList.cmx misc/pretty.cmx \
misc/ns.cmx types/normal.cmx types/intervals.cmx types/ident.cmx \
misc/encodings.cmx misc/custom.cmx types/compunit.cmx types/chars.cmx \
misc/bool.cmx types/atoms.cmx types/types.cmi
compile/auto_pat.cmo: types/types.cmi types/ident.cmo types/chars.cmi \
types/atoms.cmi compile/auto_pat.cmi
compile/auto_pat.cmx: types/types.cmx types/ident.cmx types/chars.cmx \
types/atoms.cmx compile/auto_pat.cmi
types/sequence.cmo: types/types.cmi misc/custom.cmo types/chars.cmi \
types/atoms.cmi types/sequence.cmi
types/sequence.cmx: types/types.cmx misc/custom.cmx types/chars.cmx \
types/atoms.cmx types/sequence.cmi
types/builtin_defs.cmo: types/types.cmi types/sequence.cmi \
types/intervals.cmi types/ident.cmo misc/encodings.cmi types/chars.cmi \
types/atoms.cmi types/builtin_defs.cmi
types/builtin_defs.cmx: types/types.cmx types/sequence.cmx \
types/intervals.cmx types/ident.cmx misc/encodings.cmx types/chars.cmx \
types/atoms.cmx types/builtin_defs.cmi
runtime/value.cmo: misc/upool.cmi types/types.cmi types/sequence.cmi \
misc/ns.cmi types/intervals.cmi misc/imap.cmi types/ident.cmo \
misc/encodings.cmi types/chars.cmi types/atoms.cmi runtime/value.cmi
runtime/value.cmx: misc/upool.cmx types/types.cmx types/sequence.cmx \
misc/ns.cmx types/intervals.cmx misc/imap.cmx types/ident.cmx \
misc/encodings.cmx types/chars.cmx types/atoms.cmx runtime/value.cmi
schema/schema_pcre.cmo: misc/encodings.cmi schema/schema_pcre.cmi
schema/schema_pcre.cmx: misc/encodings.cmx schema/schema_pcre.cmi
schema/schema_types.cmo: runtime/value.cmi misc/ns.cmi misc/encodings.cmi \
types/atoms.cmi schema/schema_types.cmi
schema/schema_types.cmx: runtime/value.cmx misc/ns.cmx misc/encodings.cmx \
types/atoms.cmx schema/schema_types.cmi
schema/schema_xml.cmo: schema/schema_pcre.cmi misc/ns.cmi misc/encodings.cmi \
schema/schema_xml.cmi
schema/schema_xml.cmx: schema/schema_pcre.cmx misc/ns.cmx misc/encodings.cmx \
schema/schema_xml.cmi
schema/schema_common.cmo: runtime/value.cmi types/types.cmi \
schema/schema_xml.cmi schema/schema_types.cmi schema/schema_pcre.cmi \
misc/ns.cmi misc/encodings.cmi types/atoms.cmi schema/schema_common.cmi
schema/schema_common.cmx: runtime/value.cmx types/types.cmx \
schema/schema_xml.cmx schema/schema_types.cmx schema/schema_pcre.cmx \
misc/ns.cmx misc/encodings.cmx types/atoms.cmx schema/schema_common.cmi
schema/schema_builtin.cmo: runtime/value.cmi types/types.cmi \
types/sequence.cmi schema/schema_xml.cmi schema/schema_types.cmi \
schema/schema_pcre.cmi schema/schema_common.cmi misc/ns.cmi \
types/intervals.cmi misc/encodings.cmi types/builtin_defs.cmi \
types/atoms.cmi schema/schema_builtin.cmi
schema/schema_builtin.cmx: runtime/value.cmx types/types.cmx \
types/sequence.cmx schema/schema_xml.cmx schema/schema_types.cmx \
schema/schema_pcre.cmx schema/schema_common.cmx misc/ns.cmx \
types/intervals.cmx misc/encodings.cmx types/builtin_defs.cmx \
types/atoms.cmx schema/schema_builtin.cmi
schema/schema_validator.cmo: runtime/value.cmi schema/schema_types.cmi \
schema/schema_pcre.cmi schema/schema_common.cmi schema/schema_builtin.cmi \
misc/ns.cmi misc/encodings.cmi types/atoms.cmi \
schema/schema_validator.cmi
schema/schema_validator.cmx: runtime/value.cmx schema/schema_types.cmx \
schema/schema_pcre.cmx schema/schema_common.cmx schema/schema_builtin.cmx \
misc/ns.cmx misc/encodings.cmx types/atoms.cmx \
schema/schema_validator.cmi
types/patterns.cmo: types/types.cmi types/sortedList.cmi types/sequence.cmi \
types/ident.cmo misc/custom.cmo types/chars.cmi compile/auto_pat.cmi \
types/atoms.cmi types/patterns.cmi
types/patterns.cmx: types/types.cmx types/sortedList.cmx types/sequence.cmx \
types/ident.cmx misc/custom.cmx types/chars.cmx compile/auto_pat.cmx \
types/atoms.cmx types/patterns.cmi
compile/print_auto.cmo: types/types.cmi types/ident.cmo compile/auto_pat.cmi \
compile/print_auto.cmi
compile/print_auto.cmx: types/types.cmx types/ident.cmx compile/auto_pat.cmx \
compile/print_auto.cmi
compile/lambda.cmo: runtime/value.cmi types/types.cmi \
schema/schema_validator.cmi misc/ns.cmi misc/imap.cmi types/ident.cmo \
types/compunit.cmi compile/auto_pat.cmi compile/lambda.cmi
compile/lambda.cmx: runtime/value.cmx types/types.cmx \
schema/schema_validator.cmx misc/ns.cmx misc/imap.cmx types/ident.cmx \
types/compunit.cmx compile/auto_pat.cmx compile/lambda.cmi
runtime/run_dispatch.cmo: runtime/value.cmi misc/upool.cmi types/types.cmi \
misc/imap.cmi types/ident.cmo misc/encodings.cmi types/chars.cmi \
compile/auto_pat.cmi types/atoms.cmi runtime/run_dispatch.cmi
runtime/run_dispatch.cmx: runtime/value.cmx misc/upool.cmx types/types.cmx \
misc/imap.cmx types/ident.cmx misc/encodings.cmx types/chars.cmx \
compile/auto_pat.cmx types/atoms.cmx runtime/run_dispatch.cmi
runtime/explain.cmo: runtime/value.cmi misc/upool.cmi types/types.cmi \
runtime/run_dispatch.cmi misc/imap.cmi types/ident.cmo misc/encodings.cmi \
types/chars.cmi compile/auto_pat.cmi types/atoms.cmi runtime/explain.cmi
runtime/explain.cmx: runtime/value.cmx misc/upool.cmx types/types.cmx \
runtime/run_dispatch.cmx misc/imap.cmx types/ident.cmx misc/encodings.cmx \
types/chars.cmx compile/auto_pat.cmx types/atoms.cmx runtime/explain.cmi
runtime/eval.cmo: runtime/value.cmi misc/upool.cmi types/types.cmi \
schema/schema_validator.cmi schema/schema_common.cmi \
runtime/run_dispatch.cmi misc/ns.cmi compile/lambda.cmi misc/imap.cmi \
types/ident.cmo runtime/explain.cmi compile/auto_pat.cmi runtime/eval.cmi
runtime/eval.cmx: runtime/value.cmx misc/upool.cmx types/types.cmx \
schema/schema_validator.cmx schema/schema_common.cmx \
runtime/run_dispatch.cmx misc/ns.cmx compile/lambda.cmx misc/imap.cmx \
types/ident.cmx runtime/explain.cmx compile/auto_pat.cmx runtime/eval.cmi
parser/cduce_loc.cmo: misc/html.cmi parser/cduce_loc.cmi
parser/cduce_loc.cmx: misc/html.cmx parser/cduce_loc.cmi
parser/url.cmo: runtime/value.cmi parser/cduce_loc.cmi parser/url.cmi
parser/url.cmx: runtime/value.cmx parser/cduce_loc.cmx parser/url.cmi
parser/ulexer.cmo: parser/ulexer.cmi
parser/ulexer.cmx: parser/ulexer.cmi
parser/ast.cmo: types/types.cmi types/sequence.cmi misc/ns.cmi \
types/intervals.cmi types/ident.cmo types/chars.cmi parser/cduce_loc.cmi \
types/builtin_defs.cmi
parser/ast.cmx: types/types.cmx types/sequence.cmx misc/ns.cmx \
types/intervals.cmx types/ident.cmx types/chars.cmx parser/cduce_loc.cmx \
types/builtin_defs.cmx
parser/parser.cmo: parser/ulexer.cmi types/types.cmi types/sequence.cmi \
misc/ns.cmi types/intervals.cmi types/ident.cmo misc/encodings.cmi \
types/chars.cmi parser/cduce_loc.cmi types/atoms.cmi parser/ast.cmo \
parser/parser.cmi
parser/parser.cmx: parser/ulexer.cmx types/types.cmx types/sequence.cmx \
misc/ns.cmx types/intervals.cmx types/ident.cmx misc/encodings.cmx \
types/chars.cmx parser/cduce_loc.cmx types/atoms.cmx parser/ast.cmx \
parser/parser.cmi
typing/typed.cmo: types/types.cmi schema/schema_validator.cmi \
types/patterns.cmi misc/ns.cmi types/ident.cmo types/compunit.cmi \
parser/cduce_loc.cmi
typing/typed.cmx: types/types.cmx schema/schema_validator.cmx \
types/patterns.cmx misc/ns.cmx types/ident.cmx types/compunit.cmx \
parser/cduce_loc.cmx
typing/typepat.cmo: types/types.cmi types/sequence.cmi types/patterns.cmi \
types/ident.cmo misc/encodings.cmi types/chars.cmi typing/typepat.cmi
typing/typepat.cmx: types/types.cmx types/sequence.cmx types/patterns.cmx \
types/ident.cmx misc/encodings.cmx types/chars.cmx typing/typepat.cmi
types/externals.cmo: parser/cduce_loc.cmi types/externals.cmi
types/externals.cmx: parser/cduce_loc.cmx types/externals.cmi
typing/typer.cmo: types/types.cmi typing/typepat.cmi typing/typed.cmo \
types/sequence.cmi schema/schema_validator.cmi types/patterns.cmi \
misc/ns.cmi types/ident.cmo misc/html.cmi types/externals.cmi \
types/compunit.cmi types/chars.cmi parser/cduce_loc.cmi \
types/builtin_defs.cmi types/atoms.cmi parser/ast.cmo typing/typer.cmi
typing/typer.cmx: types/types.cmx typing/typepat.cmx typing/typed.cmx \
types/sequence.cmx schema/schema_validator.cmx types/patterns.cmx \
misc/ns.cmx types/ident.cmx misc/html.cmx types/externals.cmx \
types/compunit.cmx types/chars.cmx parser/cduce_loc.cmx \
types/builtin_defs.cmx types/atoms.cmx parser/ast.cmx typing/typer.cmi
compile/compile.cmo: runtime/value.cmi misc/upool.cmi types/types.cmi \
typing/typer.cmi typing/typed.cmo types/patterns.cmi compile/lambda.cmi \
misc/imap.cmi types/ident.cmo runtime/eval.cmi types/compunit.cmi \
parser/cduce_loc.cmi compile/auto_pat.cmi parser/ast.cmo \
compile/compile.cmi
compile/compile.cmx: runtime/value.cmx misc/upool.cmx types/types.cmx \
typing/typer.cmx typing/typed.cmx types/patterns.cmx compile/lambda.cmx \
misc/imap.cmx types/ident.cmx runtime/eval.cmx types/compunit.cmx \
parser/cduce_loc.cmx compile/auto_pat.cmx parser/ast.cmx \
compile/compile.cmi
schema/schema_parser.cmo: parser/url.cmi schema/schema_xml.cmi \
schema/schema_validator.cmi schema/schema_types.cmi \
schema/schema_pcre.cmi schema/schema_common.cmi schema/schema_builtin.cmi \
misc/ns.cmi misc/encodings.cmi types/atoms.cmi schema/schema_parser.cmi
schema/schema_parser.cmx: parser/url.cmx schema/schema_xml.cmx \
schema/schema_validator.cmx schema/schema_types.cmx \
schema/schema_pcre.cmx schema/schema_common.cmx schema/schema_builtin.cmx \
misc/ns.cmx misc/encodings.cmx types/atoms.cmx schema/schema_parser.cmi
schema/schema_converter.cmo: runtime/value.cmi types/types.cmi \
typing/typer.cmi typing/typepat.cmi types/sequence.cmi \
schema/schema_xml.cmi schema/schema_validator.cmi schema/schema_types.cmi \
schema/schema_parser.cmi schema/schema_common.cmi \
schema/schema_builtin.cmi misc/ns.cmi types/ident.cmo misc/encodings.cmi \
types/builtin_defs.cmi types/atoms.cmi
schema/schema_converter.cmx: runtime/value.cmx types/types.cmx \
typing/typer.cmx typing/typepat.cmx types/sequence.cmx \
schema/schema_xml.cmx schema/schema_validator.cmx schema/schema_types.cmx \
schema/schema_parser.cmx schema/schema_common.cmx \
schema/schema_builtin.cmx misc/ns.cmx types/ident.cmx misc/encodings.cmx \
types/builtin_defs.cmx types/atoms.cmx
runtime/load_xml.cmo: runtime/value.cmi parser/url.cmi misc/upool.cmi \
misc/ns.cmi misc/imap.cmi types/ident.cmo misc/encodings.cmi \
parser/cduce_loc.cmi types/atoms.cmi runtime/load_xml.cmi
runtime/load_xml.cmx: runtime/value.cmx parser/url.cmx misc/upool.cmx \
misc/ns.cmx misc/imap.cmx types/ident.cmx misc/encodings.cmx \
parser/cduce_loc.cmx types/atoms.cmx runtime/load_xml.cmi
runtime/print_xml.cmo: runtime/value.cmi types/sequence.cmi \
schema/schema_builtin.cmi misc/ns.cmi types/intervals.cmi misc/imap.cmi \
types/ident.cmo misc/encodings.cmi types/atoms.cmi runtime/print_xml.cmi
runtime/print_xml.cmx: runtime/value.cmx types/sequence.cmx \
schema/schema_builtin.cmx misc/ns.cmx types/intervals.cmx misc/imap.cmx \
types/ident.cmx misc/encodings.cmx types/atoms.cmx runtime/print_xml.cmi
compile/operators.cmo: runtime/value.cmi types/types.cmi typing/typer.cmi \
runtime/eval.cmi parser/cduce_loc.cmi compile/operators.cmi
compile/operators.cmx: runtime/value.cmx types/types.cmx typing/typer.cmx \
runtime/eval.cmx parser/cduce_loc.cmx compile/operators.cmi
types/builtin.cmo: runtime/value.cmi parser/url.cmi types/types.cmi \
typing/typer.cmi types/sequence.cmi runtime/print_xml.cmi \
compile/operators.cmi misc/ns.cmi runtime/load_xml.cmi \
types/intervals.cmi types/ident.cmo runtime/eval.cmi types/chars.cmi \
parser/cduce_loc.cmi types/builtin_defs.cmi types/atoms.cmi \
types/builtin.cmi
types/builtin.cmx: runtime/value.cmx parser/url.cmx types/types.cmx \
typing/typer.cmx types/sequence.cmx runtime/print_xml.cmx \
compile/operators.cmx misc/ns.cmx runtime/load_xml.cmx \
types/intervals.cmx types/ident.cmx runtime/eval.cmx types/chars.cmx \
parser/cduce_loc.cmx types/builtin_defs.cmx types/atoms.cmx \
types/builtin.cmi
driver/librarian.cmo: runtime/value.cmi parser/ulexer.cmi types/types.cmi \
typing/typer.cmi parser/parser.cmi compile/lambda.cmi types/ident.cmo \
types/externals.cmi runtime/eval.cmi types/compunit.cmi \
compile/compile.cmi parser/cduce_loc.cmi types/builtin.cmi \
driver/librarian.cmi
driver/librarian.cmx: runtime/value.cmx parser/ulexer.cmx types/types.cmx \
typing/typer.cmx parser/parser.cmx compile/lambda.cmx types/ident.cmx \
types/externals.cmx runtime/eval.cmx types/compunit.cmx \
compile/compile.cmx parser/cduce_loc.cmx types/builtin.cmx \
driver/librarian.cmi
types/sample.cmo: types/types.cmi types/intervals.cmi types/ident.cmo \
types/chars.cmi types/atoms.cmi types/sample.cmi
types/sample.cmx: types/types.cmx types/intervals.cmx types/ident.cmx \
types/chars.cmx types/atoms.cmx types/sample.cmi
driver/cduce.cmo: runtime/value.cmi parser/ulexer.cmi types/types.cmi \
typing/typer.cmi misc/stats.cmi types/sequence.cmi types/sample.cmi \
compile/print_auto.cmi types/patterns.cmi parser/parser.cmi \
compile/operators.cmi misc/ns.cmi driver/librarian.cmi types/ident.cmo \
runtime/eval.cmi compile/compile.cmi parser/cduce_loc.cmi \
types/builtin_defs.cmi types/builtin.cmi compile/auto_pat.cmi \
types/atoms.cmi parser/ast.cmo driver/cduce.cmi
driver/cduce.cmx: runtime/value.cmx parser/ulexer.cmx types/types.cmx \
typing/typer.cmx misc/stats.cmx types/sequence.cmx types/sample.cmx \
compile/print_auto.cmx types/patterns.cmx parser/parser.cmx \
compile/operators.cmx misc/ns.cmx driver/librarian.cmx types/ident.cmx \
runtime/eval.cmx compile/compile.cmx parser/cduce_loc.cmx \
types/builtin_defs.cmx types/builtin.cmx compile/auto_pat.cmx \
types/atoms.cmx parser/ast.cmx driver/cduce.cmi
runtime/system.cmo: runtime/value.cmi types/types.cmi types/sequence.cmi \
compile/operators.cmi types/ident.cmo parser/cduce_loc.cmi \
types/builtin_defs.cmi types/builtin.cmi types/atoms.cmi
runtime/system.cmx: runtime/value.cmx types/types.cmx types/sequence.cmx \
compile/operators.cmx types/ident.cmx parser/cduce_loc.cmx \
types/builtin_defs.cmx types/builtin.cmx types/atoms.cmx
query/query_aggregates.cmo: runtime/value.cmi types/sequence.cmi \
compile/operators.cmi types/intervals.cmi types/builtin_defs.cmi
query/query_aggregates.cmx: runtime/value.cmx types/sequence.cmx \
compile/operators.cmx types/intervals.cmx types/builtin_defs.cmx
ocamliface/mltypes.cmo: types/ident.cmo ocamliface/config.cmo \
parser/cduce_loc.cmi ocamliface/mltypes.cmi
ocamliface/mltypes.cmx: types/ident.cmx ocamliface/config.cmx \
parser/cduce_loc.cmx ocamliface/mltypes.cmi
ocamliface/mlstub.cmo: types/types.cmi typing/typer.cmi types/sequence.cmi \
misc/ns.cmi ocamliface/mltypes.cmi driver/librarian.cmi types/ident.cmo \
types/externals.cmi ocamliface/config.cmo compile/compile.cmi \
parser/cduce_loc.cmi types/builtin_defs.cmi types/atoms.cmi \
parser/ast.cmo ocamliface/mlstub.cmi
ocamliface/mlstub.cmx: types/types.cmx typing/typer.cmx types/sequence.cmx \
misc/ns.cmx ocamliface/mltypes.cmx driver/librarian.cmx types/ident.cmx \
types/externals.cmx ocamliface/config.cmx compile/compile.cmx \
parser/cduce_loc.cmx types/builtin_defs.cmx types/atoms.cmx \
parser/ast.cmx ocamliface/mlstub.cmi
parser/cduce_netclient.cmo: runtime/value.cmi parser/url.cmi \
driver/cduce_config.cmi
parser/cduce_netclient.cmx: runtime/value.cmx parser/url.cmx \
driver/cduce_config.cmx
runtime/cduce_pxp.cmo: runtime/value.cmi parser/url.cmi schema/schema_xml.cmi \
runtime/load_xml.cmi driver/cduce_config.cmi runtime/cduce_pxp.cmi
runtime/cduce_pxp.cmx: runtime/value.cmx parser/url.cmx schema/schema_xml.cmx \
runtime/load_xml.cmx driver/cduce_config.cmx runtime/cduce_pxp.cmi
driver/run.cmo: runtime/value.cmi parser/ulexer.cmi misc/stats.cmi \
driver/librarian.cmi types/ident.cmo misc/html.cmi parser/cduce_loc.cmi \
driver/cduce_config.cmi driver/cduce.cmi types/builtin.cmi
driver/run.cmx: runtime/value.cmx parser/ulexer.cmx misc/stats.cmx \
driver/librarian.cmx types/ident.cmx misc/html.cmx parser/cduce_loc.cmx \
driver/cduce_config.cmx driver/cduce.cmx types/builtin.cmx
driver/start.cmo: driver/run.cmo
driver/start.cmx: driver/run.cmx
driver/webiface.cmo: misc/html.cmi driver/examples.cmo parser/cduce_loc.cmi \
driver/cduce.cmi
driver/webiface.cmx: misc/html.cmx driver/examples.cmx parser/cduce_loc.cmx \
driver/cduce.cmx
driver/evaluator.cmo: misc/html.cmi parser/cduce_loc.cmi \
driver/cduce_config.cmi driver/cduce.cmi
driver/evaluator.cmx: misc/html.cmx parser/cduce_loc.cmx \
driver/cduce_config.cmx driver/cduce.cmx
tools/validate.cmo: schema/schema_types.cmi schema/schema_parser.cmi \
schema/schema_common.cmi
tools/validate.cmx: schema/schema_types.cmx schema/schema_parser.cmx \
schema/schema_common.cmx
ocamliface/mltypes.cmo: types/ident.cmo ocamliface/config.cmo \
parser/cduce_loc.cmi ocamliface/mltypes.cmi
ocamliface/mltypes.cmx: types/ident.cmx ocamliface/config.cmx \
parser/cduce_loc.cmx ocamliface/mltypes.cmi
ocamliface/mlstub.cmo: types/types.cmi typing/typer.cmi types/sequence.cmi \
misc/ns.cmi ocamliface/mltypes.cmi driver/librarian.cmi types/ident.cmo \
types/externals.cmi ocamliface/config.cmo compile/compile.cmi \
parser/cduce_loc.cmi types/builtin_defs.cmi types/atoms.cmi \
parser/ast.cmo ocamliface/mlstub.cmi
ocamliface/mlstub.cmx: types/types.cmx typing/typer.cmx types/sequence.cmx \
misc/ns.cmx ocamliface/mltypes.cmx driver/librarian.cmx types/ident.cmx \
types/externals.cmx ocamliface/config.cmx compile/compile.cmx \
parser/cduce_loc.cmx types/builtin_defs.cmx types/atoms.cmx \
parser/ast.cmx ocamliface/mlstub.cmi
parser/cduce_curl.cmo: runtime/value.cmi parser/url.cmi \
driver/cduce_config.cmi
parser/cduce_curl.cmx: runtime/value.cmx parser/url.cmx \
driver/cduce_config.cmx
parser/cduce_netclient.cmo: runtime/value.cmi parser/url.cmi \
driver/cduce_config.cmi
parser/cduce_netclient.cmx: runtime/value.cmx parser/url.cmx \
driver/cduce_config.cmx
runtime/cduce_expat.cmo: runtime/value.cmi parser/url.cmi \
schema/schema_xml.cmi runtime/load_xml.cmi driver/cduce_config.cmi \
runtime/cduce_expat.cmi
runtime/cduce_expat.cmx: runtime/value.cmx parser/url.cmx \
schema/schema_xml.cmx runtime/load_xml.cmx driver/cduce_config.cmx \
runtime/cduce_expat.cmi
runtime/cduce_pxp.cmo: runtime/value.cmi parser/url.cmi schema/schema_xml.cmi \
runtime/load_xml.cmi driver/cduce_config.cmi runtime/cduce_pxp.cmi
runtime/cduce_pxp.cmx: runtime/value.cmx parser/url.cmx schema/schema_xml.cmx \
runtime/load_xml.cmx driver/cduce_config.cmx runtime/cduce_pxp.cmi
misc/encodings.cmi: misc/custom.cmo
misc/upool.cmi: misc/custom.cmo
misc/ns.cmi: misc/upool.cmi misc/encodings.cmi misc/custom.cmo
types/sortedList.cmi: misc/custom.cmo
misc/bool.cmi: misc/custom.cmo
types/intervals.cmi: misc/custom.cmo
types/chars.cmi: misc/custom.cmo
types/atoms.cmi: misc/ns.cmi misc/encodings.cmi misc/custom.cmo
types/types.cmi: misc/ns.cmi types/intervals.cmi types/ident.cmo \
misc/custom.cmo types/chars.cmi types/atoms.cmi
compile/auto_pat.cmi: types/types.cmi types/ident.cmo types/chars.cmi \
types/atoms.cmi
types/sequence.cmi: types/types.cmi types/atoms.cmi
types/builtin_defs.cmi: types/types.cmi types/ident.cmo types/atoms.cmi
runtime/value.cmi: types/types.cmi misc/ns.cmi types/intervals.cmi \
misc/imap.cmi types/ident.cmo misc/encodings.cmi types/chars.cmi \
types/atoms.cmi
schema/schema_pcre.cmi: misc/encodings.cmi
schema/schema_types.cmi: runtime/value.cmi misc/ns.cmi misc/encodings.cmi \
types/atoms.cmi
schema/schema_xml.cmi: misc/ns.cmi misc/encodings.cmi
schema/schema_common.cmi: runtime/value.cmi types/types.cmi \
schema/schema_types.cmi misc/ns.cmi types/ident.cmo misc/encodings.cmi \
types/atoms.cmi
schema/schema_builtin.cmi: runtime/value.cmi types/types.cmi \
schema/schema_types.cmi misc/ns.cmi misc/encodings.cmi
schema/schema_validator.cmi: runtime/value.cmi schema/schema_types.cmi \
misc/encodings.cmi
types/patterns.cmi: types/types.cmi types/ident.cmo misc/custom.cmo \
compile/auto_pat.cmi
compile/print_auto.cmi: compile/auto_pat.cmi
compile/lambda.cmi: runtime/value.cmi types/types.cmi \
schema/schema_validator.cmi misc/ns.cmi misc/imap.cmi types/ident.cmo \
types/compunit.cmi compile/auto_pat.cmi
runtime/run_dispatch.cmi: runtime/value.cmi compile/auto_pat.cmi
runtime/explain.cmi: runtime/value.cmi compile/auto_pat.cmi
runtime/eval.cmi: runtime/value.cmi misc/ns.cmi compile/lambda.cmi \
types/ident.cmo types/compunit.cmi
parser/cduce_loc.cmi: misc/html.cmi
parser/parser.cmi: parser/ast.cmo
typing/typepat.cmi: types/types.cmi types/patterns.cmi types/ident.cmo \
misc/encodings.cmi
types/externals.cmi: types/types.cmi
typing/typer.cmi: types/types.cmi typing/typed.cmo \
schema/schema_validator.cmi types/patterns.cmi misc/ns.cmi \
types/ident.cmo types/compunit.cmi parser/cduce_loc.cmi parser/ast.cmo
compile/compile.cmi: runtime/value.cmi types/types.cmi typing/typer.cmi \
typing/typed.cmo compile/lambda.cmi types/ident.cmo types/compunit.cmi \
parser/ast.cmo
schema/schema_parser.cmi: schema/schema_types.cmi
runtime/load_xml.cmi: runtime/value.cmi
runtime/print_xml.cmi: runtime/value.cmi misc/ns.cmi
compile/operators.cmi: runtime/value.cmi types/types.cmi parser/cduce_loc.cmi
types/builtin.cmi: runtime/value.cmi typing/typer.cmi
driver/librarian.cmi: runtime/value.cmi types/types.cmi typing/typer.cmi \
types/ident.cmo types/externals.cmi types/compunit.cmi \
compile/compile.cmi
types/sample.cmi: types/types.cmi
driver/cduce.cmi: runtime/value.cmi types/atoms.cmi
ocamliface/mltypes.cmi: types/types.cmi
ocamliface/mlstub.cmi: parser/ast.cmo
ocamliface/mltypes.cmi: types/types.cmi
ocamliface/mlstub.cmi: parser/ast.cmo
schema/schema_types.cmi: runtime/value.cmi misc/ns.cmi misc/encodings.cmi \
types/atoms.cmi
cduce-0.6.0/doc/ 0000775 0000000 0000000 00000000000 12305625535 0013353 5 ustar 00root root 0000000 0000000 cduce-0.6.0/doc/Makefile 0000664 0000000 0000000 00000000460 12305625535 0015013 0 ustar 00root root 0000000 0000000 # MAN = cduce.1 dtd2cduce.1 cduce_validate.1 cdo2ml.1 cduce_mktop.1
INSTALL_MAN = cduce.1 cduce_mktop.1 dtd2cduce.1
MAN = $(INSTALL_MAN)
all: $(MAN)
.SUFFIXES: .1 .docbook
.docbook.1:
docbook-to-man $< > $@
install:
@echo "Install man pages"
$(HIDE)$(INSTALL) -m644 $(INSTALL_MAN) $(MANDIR)/man1/
cduce-0.6.0/doc/cduce.1 0000664 0000000 0000000 00000002257 12305625535 0014526 0 ustar 00root root 0000000 0000000 .TH "cduce" "1"
.SH "NAME"
cduce \(em The CDuce compiler/interpreter/toplevel
.SH "SYNOPSIS"
.PP
\fBcduce\fR [ \fBOPTIONS\fP \&...] [\fB\-\-arg \fBargument\fP\fP \&...]
.PP
\fBcduce\fR [ \fBOPTIONS\fP \&...] [\fB \fBfile.cd\fP | \-\-stdin \fP] [\fB\-\-arg \fBargument\fP\fP \&...]
.PP
\fBcduce \-\-compile\fR [ \fBOPTIONS\fP \&...] [ \fB\fBfile.cd\fP\fP ]
.PP
\fBcduce \-\-run\fR [ \fBOPTIONS\fP \&...] [ \fB\fBfile.cdo\fP\fP \&...] [\fB\-\-arg \fBargument\fP\fP \&...]
.SH "Description"
.PP
See the CDuce users' manual:
\fBhttp://www.cduce.org/manual_interpreter.html\fP.
.SH "Reporting bugs"
.PP
Report bugs to devel@cduce.org.
.SH "See also"
.PP
A complete documentation, reference manual, tutorial, technical articles on
implementation and theoretical issues, benchmarks, source code, mailing lists
and forums can be found on the \fICDuce\fP website:
\fBhttp://www.cduce.org/\fP.
.SH "Authors"
.PP
Alain Frisch . Small contributions by
Giuseppe Castagna , Julien Demouth , and Stefano Zacchiroli .
.\" created by instant / docbook-to-man, Fri 08 Jul 2005, 11:52
cduce-0.6.0/doc/cduce.docbook 0000664 0000000 0000000 00000004366 12305625535 0016011 0 ustar 00root root 0000000 0000000
cduce1cduceThe CDuce compiler/interpreter/toplevelcducecducecduce --compilecduce --runDescription
See the CDuce users' manual:
http://www.cduce.org/manual_interpreter.html.
Reporting bugs
Report bugs to devel@cduce.org.
See also
A complete documentation, reference manual, tutorial, technical articles on
implementation and theoretical issues, benchmarks, source code, mailing lists
and forums can be found on the CDuce website:
http://www.cduce.org/.
Authors
Alain Frisch <Alain.Frisch@ens.fr>. Small contributions by
Giuseppe Castagna <Giuseppe.Castagna@ens.fr>, Julien Demouth <Julien.Demouth@ens.fr>, and Stefano Zacchiroli <zack@di.ens.fr>.
cduce-0.6.0/doc/cduce_mktop.1 0000664 0000000 0000000 00000000661 12305625535 0015735 0 ustar 00root root 0000000 0000000 .TH "cduce_mktop" "1"
.SH "NAME"
cduce_mktop \(em Produce a customized CDuce toplevel/compiler.
.SH "SYNOPSIS"
.PP
\fBcduce_mktop\fR [\fB\fBtarget\fP\fP] [\fB\fBprimitive file\fP\fP]
.SH "Description"
.PP
See the CDuce users' manual:
\fBhttp://www.cduce.org/manual_interfacewithocaml.html#link\fP.
.SH "Author"
.PP
Alain Frisch .
.\" created by instant / docbook-to-man, Fri 08 Jul 2005, 11:52
cduce-0.6.0/doc/cduce_mktop.docbook 0000664 0000000 0000000 00000001477 12305625535 0017223 0 ustar 00root root 0000000 0000000
cduce_mktop1cduce_mktopProduce a customized CDuce toplevel/compiler.cduce_mktopDescription
See the CDuce users' manual:
http://www.cduce.org/manual_interfacewithocaml.html#link.
Author
Alain Frisch <Alain.Frisch@ens.fr>.
cduce-0.6.0/doc/docbook/ 0000775 0000000 0000000 00000000000 12305625535 0014773 5 ustar 00root root 0000000 0000000 cduce-0.6.0/doc/docbook/docbook-categ.cd 0000664 0000000 0000000 00000001466 12305625535 0020013 0 ustar 00root root 0000000 0000000 type Special = Xbr | Xspan | Xbdo | Xmap | Xobject | Ximg;;
type Fontstyle = Xtt | Xi | Xb | Xbig | Xsmall;;
type Phrase = Xem | Xstrong | Xdfn | Xcode | Xq |
Xsamp | Xkbd | Xvar | Xcite | Xabbr | Xacronym | Xsub | Xsup;;
type InlineForms = Xinput | Xselect | Xtextarea | Xlabel | Xbutton;;
type MiscInline = Xins | Xdel | Xscript;;
type Misc = Xnoscript | MiscInline;;
type Inline = Xa | Special | Fontstyle | Phrase | InlineForms;;
type Inlines = [ (Char | Inline | MiscInline)* ];;
type Heading = Xh1 | Xh2 | Xh3 | Xh4 | Xh5 | Xh6;;
type Lists = Xul | Xol | Xdl;;
type Blocktext = Xpre | Xhr | Xblockquote | Xaddress;;
type Block = Xp | Heading | Xdiv | Lists | Blocktext | Xfieldset | Xtable;;
type Blocks = [ (Block | Xform | Misc)* ];;
type Flow = [ (Char | Block | Xform | Inline | Misc)* ];;
cduce-0.6.0/doc/docbook/docbook-intro.sgml 0000664 0000000 0000000 00000212211 12305625535 0020427 0 ustar 00root root 0000000 0000000
Cygnus Solutions
1325 Chesapeake TerraceSunnyvaleCA 94089
">
1997, 1998Cygnus
Solutions">
]>
1998-10-19Get Going With DocBookDocBookNotes for Hackersdocumentation in progressMarkGalassi&cygnus-full;rosalia@galassi.org1998Mark Galassi
This document can be freely redistributed according to the terms
of the GNU General Public License.0.01997-10-11rosalia@galassi.orgInitial revision; mostly just an
outline0.11997-11-01rosalia@galassi.orgFirmed up the outline, based on the evolution of
&cygnus;'s DocBook effort0.21997-11-09rosalia@galassi.orgHave enough meat in there that I have announced
it.0.31997-12-31rosalia@galassi.orgSeparated the tutorial (this document) from the
style guide for my project at Cygnus. This tutorial can now
be distributed on its own.0.41998-02-14rosalia@galassi.orgAdded some blurbs on descriptions and made the
first web release of this document.0.51998-06-12rosalia@galassi.orgAdded Sara Mitchell's brief essay on SGML marked
sections as its own chapter.0.61998-10-19rosalia@galassi.orgMentioned that this document is GPLed, did a bit of
cleanup, and added mention of my FrameMaker+SGML
EDD.What is this?A tutorial for hacker–writers
This booklet has two main goals:
The first is present a tutorial on writing documentation that
will be used in a particular project at Cygnus.
The second is for me to clarify my thoughts on how I think the
books we ship with should be structured.
A third goal, which is not as pressing, is that this booklet
should become a tutorial for all people
at Cygnus (and elsewhere; the GNOME project, for example is
using DocBook) who will be writing notes for future
incorporation into Cygnus documentation.
If you just want the tutorial with no further background
information, please jump right to .
An example of how to use DocBook structure
This booklet is a valid demonstration of how to use DocBook
elements for writing Cygnus documentation. As the &cygnus;
tag team refines the &cygnus; style and
typical tag usage, this document will be updated to reflect
that style and usage.
Whenever I mention &cygnus;, please note that the &cygnus;
stylesheets and all the tools we use are being made available
to the world at large, so projects outside of &cygnus; can
also use these stylesheets, our tools, and this tutorial.
If you are a hacker working on a project and you need to write
an essay, or if you would like to document your portion of the
project, you can use this booklet as an example of how to
structure your document and what DocBook elements you should
use to mark up your text.
Not an example for all
situations
This booklet is a tutorial written in quasi–slapstick
style — I use the words I and
you liberally. You should not treat it
as an example of how to write a reference manual, or as an
example of how to write a more stuffy tutorial.
Get going
Here is a brutal sequence of steps that will get you started
writing DocBook documents.
If you actually want to understand what is
going on, you might want to read first
and then come back to this chapter.
This chapter will not tell you how to get the tools installed
— it is assumed that your system administrator has done
that for you. If she or he has not done so, there is an
appendix that gives instructions to get DocBook editing and
processing tools. There are sections for (with free tools),
(with free
tools) and .
Hello, world
Here's a simple DocBook document to get going. I will show
you how to write this document using explicit element tags,
but if you are using an authoring tool that provides a high
level interface, just choose the same tags using that
interface.
Bare bones DocBook document — the source
<!doctype book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
]>
<book>
<bookinfo>
<date>1997-10-11</date>
<title>My first booklet</title>
<subtitle>it even has a subtitle</subtitle>
</bookinfo>
<toc></toc>
<!-- We are done with the preliminaries, now we can start with
the body of the document -->
<chapter>
<title>My first chapter</title>
<para>Here's a paragraph of text because it is stylistically
poor to start a section right after the chapter title.</para>
<sect1>
<title>A section in that first chapter</title>
<para>All I need is a single paragraph of text to make the
section valid.</para>
</sect1>
</chapter>
<appendix>
<title>Remaining details</title>
<para>Although this booklet is quite complete, here I will
mention some details I never got to.</para>
<sect1>
<title>Use of the word dude</title>
<para>Here's an example of how to say
<emphasis>dude</emphasis>: DUDE.</para>
</sect1>
</appendix>
</book>
Brief explanation
This example, and the others in this chapter, are meant to get
you used to SGML/DocBook markup, but a
minimal explanation should be given here.
The first line, with the <!doctype book
stuff, is boiler plate. You can ignore it except to note that
it says book, and the document then begins
with the <book> tag. These must
agree.
The special words wrapped with < and > symbols are
called tags, and they are used to
delimit elements. Elements are
structural parts of the the document, like chapters, titles,
paragraphs and so forth.
Another feature of interest in this brief document is the fact
that the <chapter> and
<sect1> have to be followed by a
<title> element.
Process and view it
You might be curious to see how your SGML
document will be rendered in both a hardcopy–oriented
typesetting output, and in online hypertext output.
I will outline the steps you should carry out on UNIX to
generate postscript and HTML output using
the program jade and the
DSSSL stylesheets we use at &cygnus;.
Assuming your file is called
myfile.sgml, you can type the following
steps:
Use jade with the
transformation DSSSL to convert DocBook
to HTML.$ jade -d /usr/lib/sgml/stylesheets/dbtohtml.dsl -t sgml myfile.sgml > myfile.html
The free tools also provide a utility shell script
db2html which does the same. So you can
just run:$ db2html myfile.sgmlUse jade with the real
DSSSL to convert DocBook to
TeX.$ jade -d /usr/lib/sgml/stylesheets/docbook.dsl -t tex myfile.sgml > myfile.texUse TeX with the jadetex
macros to process myfile.tex.$ jadetex myfile.texUse dvips to generate a
postscript file from myfile.dvi.$ dvips myfile.dviThe steps to create the postscript file can be
replaced by:$ db2ps myfile.sgml
You can now view the HTML file with
your favourite browser, and you can print the postscript
file, or view it with
ghostscript, or its front end
gv.
A slightly more complex example
Let us add some body to the trivial example. The
beefed–up example begins to demonstrate how
exaggeratedly strict you should be when you write your
documents. If this makes you nervous, will try to reassure you that it is a
good thing to do(TM).
Fleshier DocBook document — the source
<!doctype book PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
]>
<book>
<bookinfo>
<date>1997-10-11</date>
<title>My first booklet</title>
<subtitle>it even has a subtitle</subtitle>
<authorgroup>
<author>
<firstname>Joe</firstname>
<othername>“dude”</othername>
<surname>Smith</surname>
</author>
</authorgroup>
<copyright>&cygnus-copyright;</copyright>
<legalnotice> &cygnus-legal-notice; </legalnotice>
</bookinfo>
<toc></toc>
<chapter id="my-first-chapter">
<title>My first chapter</title>
<para>Here's a paragraph of text because it is stylistically
poor to start a section right after the chapter
title.</para>
<sect1 id="my-first-chapter-a-section">
<title>A section in that first chapter</title>
<titleabbrev>A section</titleabbrev>
<para>All I need is a single paragraph of text to make the
section valid.</para>
</sect1>
</chapter>
<appendix id="Remaining-details">
<title>Remaining details</title>
<para>Although this booklet is quite complete, here I will
mention some details I never got to.</para>
<sect1 id="Use-of-the-word-dude">
<title>Use of the word dude</title>
<para>Here's an example of how to say
<emphasis>dude</emphasis>: DUDE.</para>
<caution>Saying dude too often can make your brain
soft.</caution>
</sect1>
</appendix>
</book>
Brief explanation
You will noticed that I added several new elements in the
document preamble (the bookinfo element). A
lot of the information in bookinfo is
meta-information, mostly to be used for
classification and indexing, and which might or might not
appear when the document is rendered.
I introduced some entities (sort of
like C preprocessor macros) such as &cygnus-copyright;. These are
supplied by someone else, and you should use them to get up to
date boiler plate information in your document, such as the
copyright statement and the legal notice.
I also added attributes to some of the
elements, for example in the tag
<chapter id="my-first-chapter">
An element's attributes allow you to pigeonhole extra
information that may be useful when that element is processed.
In this case, the id
attribute identifies the chapters or sections for possible
future cross–referencing.
From here on
Examples from now on will not give the entire book or article
structure: you are supposed to use your powers of analogy to
fit future fragments into one of the above top level
structures. Lengthy examples will, however, contain an
initial doctype statement so that they will
constitute a valid SGML file. Remember to
strip that away if you include the fragment in a larger
document.
A tour of some DocBook featuresDocBook tour
This chapter gives a tour of the various DocBook features I
expect you will need to use, and tells you how to use them. In
some cases DocBook allows you to do something in more than one
way. In those cases, I will tell you how we have agreed to do
those things at &cygnus;.Global markups
Your docbook document will always have a top level element. In
the examples above it was book, but it can
be article, set,
part, chapter and one of
many more. tags.
I suspect that as a hacker, rather than a professional doc
writer, you will usually be in one of two situations: either you
are writing an article or essay yourself (in which case you
will probably use article as a top level
element) or you will be working within the structure of an
existing book or set of books (in which case you will probably
be using book or chapter
as your top level element.
Books
A book will be structured in the following way:
book
meta information
chapter
sect1
sect1
chapter
sect1
appendix
sect1
appendix
sect1
…
glossary
Articles
An article will be structured in the following way:
article
meta information
sect1
sect1
sect2
sect1
…
Examples and screen snapshots
You will frequently want to report a typical session on the
command line (sort the way I do in ), or describe how to
interact with a GUI.
Examples involving plain text
Command line examples are rather straightforward, since they
present a linear progression. The main elements to keep in
mind are example,
programlisting,
screen, literal,
prompt and userinput.
Program listings will be discussed in .
As an example, here's how I wrote the beginning of the
anonymous ftp session in :
Documenting a typical ftp session
<!doctype screen PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
]>
<screen>
<prompt>$</prompt> <userinput>ncftp ftp://ftp.cygnus.com/pub/home/rosalia/</userinput>
<prompt>ncftp></prompt> <userinput>cd docware/RPMS/i386/</userinput>
<prompt>ncftp></prompt> <userinput>mget *.rpm</userinput>
<prompt>ncftp></prompt> <userinput>quit</userinput>
</screen>
If you process and view this snippet, you will see that the
HTML code has a nice gray shading for screenshots. For now
the TeX/postscript output does not have a similar
cartouche, but it does use a
typewriter font.
Describing GUIs
I have never described a GUI using screen shots or anything
like that, so I will skip this one for now. All I know is
that you use tags like callout. I'll
take a screen dump from xv
running on a Dilbert strip and experiment.
Code samples
In writing technical documentation you frequently need to
show pieces of program source code. You can do this with
DocBook's programlisting tag:Program listings in DocBook
<example>
<title>A simple C program</title>
<programlisting role="C">
#include <stdio.h>
main()
{
printf("Hello, world!\n");
}
</programlisting>
</example>
Here's what it would look like:A simple C program
#include <stdio.h>
main()
{
printf("Hello, world!\n");
}
Describing an API
DocBook has a rather detailed way of marking up descriptions
of function behaviour. The tag that introduces it is
funcsynopsis. Here is an example:Describing a function in a C library API
<funcsynopsis>
<funcsynopsisinfo>#include <stdlib.h></funcsynopsisinfo>
<funcdef>double <function>atof</function></funcdef>
<paramdef>const char *<parameter>nptr</parameter></paramdef>
</funcsynopsis>
Here is how it looks:#include <stdlib.h>double atofconst char *nptrTables
For now I am just going to play around with some examples of
tables (so look at the source to see how they are done), after
which I will present a few simple ways of doing tables. These
tables work well, and they might cover most situations in
which you will need tables.
A simple informal table (no title)
<!doctype informaltable PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
]>
<informaltable frame="all">
<title>A fictitious description of compiler features</title>
<tgroup cols="4">
<thead>
<row>
<entry>Architecture</entry>
<entry>Company</entry>
<entry>Native code support</entry>
<entry>Max optimization</entry>
</row>
</thead>
<tbody>
<row>
<entry>i386</entry>
<entry>Intel</entry>
<entry>yes</entry>
<entry>-O4</entry>
</row>
<row>
<entry>alpha</entry>
<entry>DEC</entry>
<entry>yes</entry>
<entry>-O3</entry>
</row>
<row>
<entry>Z80</entry>
<entry>Zilog</entry>
<entry>no</entry>
<entry>-O1</entry>
</row>
</tbody>
</tgroup>
</informaltable>
ArchitectureCompanyNative codeMax optimizationi386Intelyes-O4alphaDECyes-O3Z80Zilogno-O1
The following table has a title, uses some mathematical
symbols (like the ∑
entity. It also uses the align attribute to specify
alignment based on the decimal point in the floating point
numbers.
A more complex table
<table frame="all">
<title>Convergence of dynamical equations and constraints for
various choices of constrained edges</title>
<tgroup cols=5 align="char" charoff="50" char=".">
<thead>
<row>
<entry>Constrained edges</entry>
<entry>Model</entry>
<entry># of iter.</entry>
<entry>∑E
<subscript>i</subscript><superscript>2</superscript></entry>
<entry>∑C
<subscript>i</subscript><superscript>2</superscript></entry>
</row>
</thead>
<tbody>
<row>
<entry>AD, AF, AG, AA'</entry>
<entry>Flat space</entry>
<entry>5</entry>
<entry>1.15×10<superscript>-24</superscript></entry>
<entry>1.77×10<superscript>-19</superscript></entry>
</row>
<row>
<entry>AD, AF, AG, AA'</entry>
<entry>Kasner universe</entry>
<entry>6</entry>
<entry>1.43×10<superscript>-19</superscript></entry>
<entry>1.77×10<superscript>-8</superscript></entry>
</row>
<row>
<entry>AB, AC, AE, AA'</entry>
<entry>Flat space</entry>
<entry>4</entry>
<entry>1.15×10<superscript>-24</superscript></entry>
<entry>4.09×10<superscript>-24</superscript></entry>
</row>
<row>
<entry>AB, AC, AE, AA'</entry>
<entry>Kasner universe</entry>
<entry>7</entry>
<entry>1.33×10<superscript>-19</superscript></entry>
<entry>8.07×10<superscript>-7</superscript></entry>
</row>
</tbody>
</tgroup>
</table>
This is how that table would be rendered in the output mode
you are viewing now:
Convergence of dynamical equations and constraints for
various choices of constrained edgesConstrained edgesModel# of iter.∑E
i2∑C
i2AD, AF, AG, AA'Flat space51.15×10-241.77×10-19AD, AF, AG, AA'Kasner universe61.43×10-191.77×10-8AB, AC, AE, AA'Flat space41.15×10-244.09×10-24AB, AC, AE, AA'Kasner universe71.33×10-198.07×10-7
Reference thingslibrary function reference things, man page reference
things
Concepts
Now that you have written your first DocBook document, and you
have processed it, you might actually want to understand a
little of what goes on in this world.
You have probably heard an incoherent babble of terms like
SGML, DTD,
DSSSL, DocBook, HTML, and
so forth, and you might be wondering how they should all fit in
to your world view.
I will give you both a top–down explanation, illustrating
what your world view might be, and a bottom–up explanation
of what all the individual SGML–related
concepts mean.
Your world view
Most people who do word processing or typesetting use a
WYSIWYG word processor or a typesetting
system in which they type explicit markup instructions which
tell the typesetter how to position text on the page (such as
TeX and
troff).
Both of these approaches suffer from a few serious problems.
The biggest one is longevity of the document: eternal
information (the profound things you type) is interspersed
with information that will be obsolete (the typesetting
information).
Another big problem with this old approach is lack of
structure: the markup did not express
content, but rather page layout. Let's say you are interested
in indexing a bunch of papers written in
TeX. It would be rather easy to
index all occurances of boldface text, but that's not
interesting at all! Instead, it would be really useful to
index all function names in an API. With old typesetting
approaches you would need artificially intelligent software
that could understand the text and say ``aha! this must be the
definition of a function in the API''.
So your old world view of writing a document and having the
main challenge be how to mark it up to look good on paper is a
poor one. Your challenge should be how to mark your document
up to emphasize semantic content.Markup based on content
So how do you mark your documents such that useful information
can be extracted and indexed? The approach in DocBook is to
provide a very rich set of markup tags that all relate to the
structure and nature of the document's content.
To give you a couple of examples of tags that could help with
generating automatic indices:
<attribution> and
<command>. If you have a large body
of documentation (for example, all Sun software and hardware
is documented with DocBook) you can do a very easy search for
any document that discusses a command called
mount, or a quote attributed to Ken
Thompson. On top of that, with such a structured search you
would only find occurances of mountwhen it is a command name, and of
Thompson when he is the author of a
quote.
Now imagine for a moment what would happen if the entire World
Wide Web used a rich content–based markup language
instead of HTML: a search engine would give you the
information you need without all the extra references which
just happen to use those words casually. A search for
mount on the web would almost certainly not
find you references on the UNIX mount
command.
So a rich markup language like DocBook is a good idea from
many points of view, but it can also be difficult to use.
DocBook has hundreds of tags (as opposed to just a few in
HTML), so you might find the learning curve steep. That is
true, and the only way around that is to write documentation
on how to use DocBook!
On the other hand, once you are quite familiar with DocBook it
will not slow you down too much to type in markup all the
time. Keep in mind that most of the time a person is not
writing, but rather worrying about meta–level problems
with their document. If you use DocBook well you will spend a
bit more time writing and a lot less time worrying about other
issues like the layout on paper. (There is nothing you can do
about it anyway!)
Explanation of SGML–related
terms
You have probably already heard many
SGML–related terms, but they are
seldom used carefully, so people end up with misconceptions
which can be annoying.SGML — a framework for defining markup
languagesSGML — a framework
First of all: SGML (which stands for
Standard Genralized Markup Language) is not a
markup language in itself! It is a
framework for describing individual
markup languages (such as DocBook or HTML), so it is really
a very different beast. Kind of like the difference between
a suitcase factory and a suitcase.
DocBook and HTML are a specific instantiation of
SGML, sometimes called SGML
applications.
So when people say that they are writing documents in
SGML they are being quite imprecise. To
be precise they could say (for example) ``We are writing our
documentation in DocBook, which is an
SGML–base markup language'', or
something on those lines.
The way you define a particular markup language in the
SGML formalism is by writing up a
Document Type Definition (usually
referred to as a
DTD. The DTD
specifies what tags can be used in the markup language, and
in some cases it also specifies the hierarchy of those
tags. For example, you have probably noticed that in
DocBook you can only put a title tag
immediately after certain tags (such as
chaptersect1 and some
others).
What about the appearnace on output media?What about output?How you should structure your documents
I will just leave fillers for most of this chapter for now, but
my scope in this chapter is to describe a few writing style
issues that are specific to computer manuals. English writing
style is described well in many books.
Structure of a book
dude
Structure of a chapter
dude
Structure of sections
dude
DocBook Resources
Norman Walsh's quick reference card on DocBook
Mark Galassi's DocBook tutorial
Bob DuCharme's tips on PSGML mode for emacs
The official DocBook home page, now hosted by OASIS
Home pare for the SGMLtools projectSGML entities
This introduction is provided to help explain some basic
concepts of using SGML to writers who are not yet very familiar
with SGML and illustrate some of the strategies from SGML that
you may use to handle common writing issues. It assumes that you
already understand the basic concept of marking up documents in
an SGML language that indicates what the content is and not what
it should look like and that you know a few acronyms, like DTD
(for document type definition) or ISO (International Standards
Organization).
BASIC STRUCTURE OF AN SGML DOCUMENT
So what does an SGML document look like? Well, there are at least three
different pieces: a main document file, the DTD for that type of document,
and the SGML Declaration for that type of document. The main document file
can also use any number of other files containing text marked up in SGML or
other types of information like graphics or multimedia files.
The SGML declaration contains a lot of esoteric information, but basically
describes SGML conventions that are followed in documents of that type. The
DTD describes the structure for documents of that type and the set of tags
(the language) that mark up the document to define the content and
structure. SGML systems need all of this information to read the SGML
document correctly.
When SGML systems work with SGML documents, they start with the main
document:
The main document defines the start and end of your
document and identifies the DTD and SGML declaration to
use with the document. It also identifies any other files
with content that are included in your document.
The main document starts with a line identifying the DTD
for this document that looks something like this:
<!DOCTYPE MyDocuments PUBLIC "-//Joan Duvall//DTD Joan's Documents//EN">
Tags are enclosed in start/end tag characters. The most
common characters for this are < (start) and > (end).
The !DOCTYPE tells SGML systems that this tag identifies
the document type for this document.
MyDocuments is the name of the document type and is always
the name of the beginning and ending tags for documents
that use this DTD. All of the content for the document
comes between these tags.
PUBLIC and the long strange name in quotes identifies the
file for the DTD and for the SGML declaration. This is
called a formal public ID, or FPI. An explanation of FPIs
comes later.
Inside the document type declaration, a document can
also have other declarations of information that can be
used in the document. This is known as the internal subset
and is contained inside brackets [ and ] after the DTD
identifier and before the end tag character. It would then
look like this:
<!DOCTYPE MyDocuments PUBLIC "-//Joan Duvall//DTD Joan's Documents//EN" [
...some other declarations here...
]>
After the document type declaration comes the document.
All of the content for your document must be enclosed in a
beginning and ending tag that matches the document type.
In our example, this looks like:
<MyDocuments> ... the content of your document ... </MyDocuments>
Tags that enclose contents have a start tag like
<MyDocuments> and an end tag </MyDocuments> that use
the same name but the slash identifies the end tag. Tag
names are also known as elements or generic identifiers
(gi's).
USING ENTITIES TO CONNECT OTHER FILES
SGML uses something called a general entity to include other
files inside a document. There are other types of entities in
SGML, but this is the most common. A general entity is
identified by an entity declaration in the internal subset of
your main document. It looks like this:
<!DOCTYPE MyDocuments PUBLIC "-//Joan Duvall//DTD Joan's Documents//EN" [
...
<!ENTITY Chapter1 SYSTEM "chp1.sgm">
... ]>
The <!ENTITY indicates this is an entity declaration. Chapter1 is the name
you give to the entity. SYSTEM is a keyword that tells an SGML system that
the identifier for the file for this entity is specific to your computer
system - most commonly this means that you supply the file name to include
directly in the declaration. In this example chp1.sgm is the file name that
should be included and this is all the path information that the system
needs to find the file.
With entities, the declaration simply identifies the file or content to use
- you decide where that should actually be included by inserting the entity
in your document. To include the entity, you insert an ampersand, the
entity name, and a semi-colon. For example:
<!DOCTYPE MyDocuments PUBLIC "-//Joan Duvall//DTD Joan's Documents//EN" [
...
<!ENTITY Chapter1 SYSTEM "chp1.sgm">
... ]>
<MyDocuments>
<Title>My First Novel</Title>
<Author>Joan Duvall</Author>
&Chapter1;
</MyDocuments>This document has only one chapter, which is included where &Chapter1;
appears. Any file that is included that contains text and SGML tags must
also fit properly within the structure of the document, as that is defined
in the DTD. They also must be balanced - any tag that starts in a separate
file must end in that file. In this example, the file chp1.sgm contains
text marked up in SGML and the contents are all enclosed within <Chapter>
... </Chapter> tags as the Chapter element is valid content at this point
within the document.
IDENTIFYING FILES WITH FORMAL PUBLIC IDS
You can always identify files to include by their name and path information
(a system identifier). But there are several reasons why you may want to
use public IDs, or FPIs, instead. The biggest reason is to make it easier
to move files without having to change your documents. Another reason is to
make it easier to exchange your files with other people or groups where the
directories on their system may be different. FPIs also allow you or your
company to claim ownership of important information, such as your DTD.
With FPIs, you identify a file by an abstract name in your document and
then supply the location of that file in a catalog, sometimes called a
mapping file or entity manager. The catalog is another, separate file from
your document.
If a file that is used in your document moves, you simply change its
location in the catalog rather than changing the location in your document
or any other document that uses it. If you exchange files with some one
else, or simply move the files to a new computer with different
directories, you only have to change the location information once in the
catalog.
FPIs must have a specific structure. Two slashes are used to mark the
separation between each part of the structure, such as:
"Registration//Owner//Keyword Description//Language"Registration
The first character indicates whether the FPI is
formally registered (+) or not (-) with an ISO approved
registration service. If you define your own FPIs and
don't register them, use the hyphen.
OwnerThe owner of the file is the second part of the FPI.
This can be a company, an organization, or a person.
KeywordThere are several keywords that indicate the type of
information in the file. Some of the most common
keywords are DTD, ELEMENT, and TEXT. DTD is used only
for DTD files, ELEMENT is usually used for DTD fragments
that contain only entity or element declarations. TEXT
is used for SGML content (text and tags).
DescriptionAny description you want to supply for the contents
of this file. This may include version numbers or any
short text that is meaningful to you and unique for the
SGML system.Language
This is an ISO two-character code that identifies the native
language for the file. EN is
used for English.USING ENTITIES FOR SHARED TEXT
Entities can be used for other purposes. Another common usage is to define
text that is repeated in lots of places that you don't want to type every
time, or that you want to be able to easily change everywhere it is used.
These are general entities that you define in the internal subset of your
document and then use within your document.
For example, you are writing a document that frequently refers to the ANSI
X.12 ASC 835 standard. This phrase must appear exactly as it is shown.
Rather than type it out every single time, you define this entity:
<!DOCTYPE MyDocuments PUBLIC "-//Joan Duvall//DTD Joan's Documents//EN" [
...
<!ENTITY ansi835 "ANSI X.12 ASC 835">
... ]>
Within the document, you use this entity every time you need
to refer to the standard name. For example:
<paragraph>This interface follows the exchange protocols for &ansi835;
version 3070 for remittance information. </paragraph>
When the document is printed or processed by an SGML system for any type of
output, the &ansi835; characters are replaced with ANSI X.12 ASC 835
instead.
USING MARKED SECTIONS TO HANDLE CONDITIONAL CONTENT
Sometimes you need to have different versions of the content
for different purposes. There are several ways to do this
using SGML, one of which is called marked sections. A simple
example of conditional content might be the description of
keys used in a software program where they appear in boxes in
the printed manual but are blue inside brackets on the web
site or CD. Rather than have two separate versions of the
conventions for each output of the manual, you can use marked
sections to keep both variations in the same document.
There are different types of marked sections, but the types
that allow you to control conditional content are
ignore/include sections. These markers act like on/off
switches to allow content to be included or ignored in
different situations.
The marker for an include marked section looks like this:
<![INCLUDE [ keys are boxed, such as <key>F1</key> ]]>
while an ignore marked section looks like this:
<![IGNORE [ keys are blue inside brackets, such as <key>F1</key> ]]>
INCLUDE and IGNORE are the keywords that tell the SGML system what to
include or skip. As this example shows, marked sections can contain both
text and tags as long as the tags within the markers are balanced (if a tag
starts inside a marker, then it ends inside the same marker).
In this example, you leave the markers for the print version as INCLUDE and
the markers for the electronic version as IGNORE when you print a master
copy. When you create the electronic book or HTML for the web site, you
change the markers for the print version to IGNORE and the markers for the
electronic version to INCLUDE. This works just fine, unless you have
several different sections you need to include or ignore together - it's
cumbersome to change each one manually and you can easily make a mistake.
So instead, you can define parameter entities under any names you want and
then change the entities to turn the include/ignore switches. To do this,
you add parameter entity declarations in the internal subset at the top of
your master SGML document. For example:
<!DOCTYPE MyDocuments PUBLIC "-//Joan Duvall//DTD Joan's Documents//EN" [
...
<!ENTITY % hardcopy "INCLUDE">
<!ENTITY % softcopy "IGNORE">
...]>
You then use the names for each marked section, like this:
<![%hardcopy; [ keys are boxed, such as <key>F1</key> ]]>
<![%softcopy; [ keys are blue inside brackets, such as <key>F1</key> ]]>
To print the master copy, you leave the entity declarations as
they are shown above. The SGML system interprets each
%hardcopy; it finds as INCLUDE and includes those marked
sections. The %softcopy; is interpreted as IGNORE and those
sections are skipped. When you're ready to produce the
electronic version, you only have to change the entity
declarations at the top of the file, like this:
<!DOCTYPE MyDocuments PUBLIC "-//Joan Duvall//DTD Joan's Documents//EN" [
...
<!ENTITY % hardcopy "IGNORE">
<!ENTITY % softcopy "INCLUDE">
...]>
With this single change, the electronic versions are included and the
printed versions are skipped.
Marked sections can be simple, but they are not always the
best choice to manage conditional text. They are best if you
use them sparingly and in very clear situations - it's easy to
figure out when to use them and when to change the
INCLUDE/IGNORE switches. Some of the problems that they can
create include:
- Marked sections can be nested (a marked section inside
another marked section), but this can confuse your SGML
system and may not produce the effect you want. For
example, SGML systems can't properly handle an included
marked section inside an ignored marked section.
- If you use lots of differently named sections, it's easy
to lose track of the content and can make your SGML
document invalid if some required structures are set to
IGNORE.
- Finally, they are not supported in XML, the new standard
subset of SGML that will be viewable directly on the World
Wide Web. Moving to XML could be difficult if you use
marked sections a lot.
Emacs PSGML mode tips
From: Mark Galassi <rosalia@galassi.org>
Sender: owner-sgml-tools@via.ecp.fr
To: sgml-tools@via.ecp.fr
Subject: Re: dtd parser!
Date: Fri, 23 Oct 1998 09:19:01 -0600 (MDT)
Jose> My question is: Is there any available tool (parser) to
Jose> analyse a dtd and return the same informations that is
Jose> contained in the reference manual?
There are a few. The one I use is emacs with PSGML mode. It has
emacs-style completion *on tags*!! It's really cool.
If you type "C-c C-e" it will prompt you for an element, and offer as
completions only the valid elements at that point.
Once it inserts the element, it inserts it with any required following
elements along with a comment saying which ones you could put later
on.
As an example, I just went to a DocBook buffer and typed
C-c C-e variab<SPACE BAR><RETURN>
and it inserted this text in the buffer:
<variablelist>
<varlistentry>
<term></term>
<listitem>
<!-- one of (epigraph authorblurb abstract highlights comment bridgehead anchor sidebar procedure msgset table figure example equation informaltable informalexample informalequation graphicco graphic blockquote address simpara para formalpara funcsynopsis cmdsynopsis synopsis screenshot screenco screen programlistingco programlisting literallayout warning tip note important caution variablelist simplelist segmentedlist orderedlist itemizedlist glosslist calloutlist) -->
</listitem>
</varlistentry>
</variablelist>
Another example:
C-c C-e i<SPACE BAR>
and it showsme the following completions:
----
Click mouse-2 on a completion to select it.
In this buffer, type RET to select the completion near point.
Possible completions are:
important indexterm
informalequation informalexample
informaltable itemizedlist
----
Obtaining and installing DocBook toolsObtaining and installing
Follow these instructions for your favourite platform, either
UNIX (free tools), Win32 (free tools) or FrameMaker+SGML.
UNIX
On UNIX we are distributing these tools as RPM packages,
providing a binary distribution for intel-baesd GNU/Linux
systems, and a source distribution for others [FIXME: must
clear this up a bit].
Here is an example of a UNIX session to get and install the
free DocBook tool set on a GNU/Linux system. The tools can be
found at this
location [FIXME: the DSSSL for printed output does
the wrong thing with ulink.]
$ncftp ftp://ftp.cygnus.com/pub/home/rosalia/ncftp>cd docware/RPMS/i386/ncftp>mget *.rpmncftp>quit$suPassword:ultra-sucure#rpm --install sgml-common*.rpm#rpm --install docbook*.rpm#rpm --install stylesheets*.rpm#rpm --install psgml*.rpm#rpm --install jade*.rpm#rpm --install jadetex*.rpm#rpm --install sgml-demo*.rpmThe order of installing packages is important.
When you are upgrading, rather than installing for the first
time, the
rpm --install
steps should be replaced with
rpm --upgrade.
You are now ready to edit SGML/DocBook
documents.
Win32
For Win32 we are distributing these tools as a standard
Windows InstallShield self-extracting package.
FrameMaker+SGMLFrameMaker+SGML is a powerful
WYSIWYGWYSIWYG stands for
“what you see is what you
get”. which allows you to edit
SGML documents with all the rendering and other features of
FrameMaker. In FrameMaker+SGML the
correspondence between SGML tags and printed output is
implemented with a document called the
EDDElement Definition Document which maps SGML elements to FrameMaker formatting
instructions.
FrameMaker+SGML ships with an
outdated DocBook implementation, based on the DocBook 2.2.1
DTD (the current version is 3.0) provided by Lynne Price.
Lynne Price then upgraded the DTD to 3.0 under contract by
Cygnus Solutions but left most of the elements undefined in
the EDD.
In March of 1998 I started filling in the gaps by defining the
output format for many tags in the EDD. Later that year Alyce
Gershenson and Frederick Geers modified the EDD and the
FrameMaker template file to match the Cygnus publication
styles. In September of 1998 I defined many more tags in the
EDD, to the point where I now think that Cygnus's EDD is a
useful tool for FrameMaker+SGML users.
I have finally made Cygnus's FrameMaker+SGML EDD available by
anonymous ftp at the address ftp://ftp.cygnus.com/pub/home/rosalia/docware/framemaker/
Please keep in mind that there are still some serious
unresolved problems in the read/write rules and the FrameMaker
API client, which I have not yet sat down to study.
To use the FrameMaker+SGML support
you should do the following:Grab all the
FrameMaker+SGML files from the
anonymous ftp site listed above. Put them in a directory
(or folder on Windows) of their own.
Start up FrameMaker+SGML and
load the file Sgmlapps.fm.
Double-click on a line that says [FIXME: must
look it up] and change the variable to match the location
of the folder you created in .
Go to the File menu and select
Developer's tools, and in there
select Reread SGML
application. It will ask you to select a
file to “read in”, and you should pick
Sgmlapps.fm.
Go to the File menu and select
Set SGML application. You will
get a couple of choices. You should choose
DocBook-3.0-cygnus (or whatever it was). Do
not choose DocBook: this is the
obsolete version that Adobe ships.
Create a new document. When
FrameMaker+SGML asks you for a
template, you should select the
Template.fm file that you downloaded.
If all went well you should now have a DocBook document open.
You can bring up the “structure view” and
“element catalog” windows to help you edit your
DocBook document.
I would love it if some
FrameMaker+SGML were to
collaborate with me on the DocBook EDD. If you are
interested in doing so, please send email to
rosalia@galassi.orgGlossaryASCII(American Standard Code for Information Interchange)
This standard character encoding scheme is used extensively
in data transmission.ANSI(American National Standards Institute) This group is
the U.S. member organization that belongs to the ISO, the
International Organization for Standardization.
attributeAn attribute provides more information about an element
such as classification level, unique reference identifiers,
or formatting information.CCITT Group 4(International Consultative Committee on Telegraphy and
Telephony) This CALS standard for raster graphics
incorporates tiling, which divides a large image into
smaller tiles. You can exchange graphic files in CCITT/4
format in a compressed state so they take up much less file
space.CITIS(Contractor Integrated Technical Information Service) As
part of CALS Phase II, CITIS is a draft functional
specification for services. DoD acquisition managers
designed CITIS as a plan to gain access to product-related
digital technical information.CGM(Computer Graphics Metafile) CGM is one of the CALS
standard formats for representing 2–D technical
illustrations. CGM is an object-oriented graphic
format.DSSSL(Document Style Semantics and Specification Language)
This draft international standard (DIS 10179) applies to the
specification of processing information for
SGML documents. DSSSL
is expected to became an international standard.
DTD(Document Type Definition) A DTD is the formal
definition of the elements, structures, and rules for
marking up a given type of SGML document.
You can store a DTD at the beginning of a document or
externally in a separate file.
EDI(Electronic Data Interchange) This is a set of computer
interchange standards for business documents such as
invoices, bills, and purchase orders.
elementAn element is a piece of data within a document that may
contain either text or other subelements such as a
paragraph, a chapter, and so on.element declarationA statement in the DTD defining an element and declaring
the order in which it may appear in the document and what
other elements it may include.
entityAn entity is a self-contained piece of data that can be
referenced as a unit. You can refer to an entity by a
symbolic name in the DTD or the document. An entity can be a
string of characters, a symbol character (unavailable on a
standard keyboard), a separate text file, or a separate
graphic file.entity declarationA statement in the DTD or document that assigns an
SGML name to an entity so you can
reference it.FOSI(Formatting Output Specification Instance) A FOSI is
used for formatting SGML documents for
printing and other outputs. It is a separate file that
contains formatting information for each element in a
document.HTML(HyperText Markup Language) This is the format of files
published on the &www;. HTML is an application of
SGML; to author in HTML using
SGML-based authoring software, you simply
need the HTML DTD.IGES(Initial Graphics Exchange Specification) The IGES
standard for engineering, product design, and manufacturing
drawings is one of the CALS standard graphics
formats.InternetThe Internet is a worldwide communications network
originally developed by the U.S. Department of Defense as a
distributed system with no single point of failure. The
Internet has seen an explosion in commercial use since the
development of easy-to-use software for accessing the
Internet.ISO(International Organization for Standardization) The ISO
is an industry-supported organization that establishes
worldwide standards for everything from data interchange
formats to film speed specifications.markupMarkup is anything added to the content of the document
that describes the text.parserA parser is a specialized software program that
recognizes SGML markup in a document. A
parser that reads a DTD and checks and reports on markup
errors is a validating SGML parser. A
parser can be built into an SGML editor
to prevent incorrect tagging and to check whether a document
contains all the required elements.PDES/STEP(Product Data Exchange Standard/Standard for the
Exchange of Product Model Data). PDES/STEP are standards
under development for communicating a complete product model
with sufficient information content that advanced CAD/CAM
applications can interpret. PDES is under development as a
national standard and STEP is under development as its
international counterpart.tagIn the world of SGML, a tag is a
marker embedded in a document that indicates the purpose or
function of the element. Each element has a beginning tag
and an end tag.&www;Often referred to as WWW or the Web, this usually refers
to information available on the Internet that can be easily
accessed with software usually called a
browser. Organizations publish their
information on the Web in a format known as HTML; this
information is usually referred to as their home
page or web site.
cduce-0.6.0/doc/docbook/docbook.cd 0000664 0000000 0000000 00000000175 12305625535 0016726 0 ustar 00root root 0000000 0000000 include "docbookx.cd" (* Docbook 4.3 DTD *)
include "docbook-categ.cd" (* Categories (Inline, ...) from this DTD *)
cduce-0.6.0/doc/docbook/docbookx.cd 0000664 0000000 0000000 00001226610 12305625535 0017123 0 ustar 00root root 0000000 0000000 (* This type has been automatically generated from /usr/share/sgml/docbook/xml-dtd-4.2-1.0-17/docbookx.dtd by dtd2cduce *)
type DBarticle =
[
((DBtitle DBsubtitle? DBtitleabbrev?)? DBarticleinfo? DBtocchap?
DBlot*
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBsect1* | DBrefentry* | DBsimplesect* | DBsection*))
| (DBsect1+ | DBrefentry+ | DBsimplesect+ | DBsection+))
((DBtoc | DBlot | DBindex | DBglossary | DBbibliography)
| DBappendix | DBackno)*)
];;
type DBrefsect3 =
[
(DBrefsect3info? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara | DBpara
| DBsimpara | DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBequation | DBexample | DBfigure | DBtable | DBmsgset
| DBprocedure | DBsidebar | DBqandaset | DBanchor | DBbridgehead
| DBremark | DBhighlights | DBabstract | DBauthorblurb
| DBepigraph | DBindexterm | DBbeginpage)+)
];;
type DBrefsect2 =
[
(DBrefsect2info? (DBtitle DBsubtitle? DBtitleabbrev?)
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
DBrefsect3*)
| DBrefsect3+))
];;
type DBrefsect1 =
[
(DBrefsect1info? (DBtitle DBsubtitle? DBtitleabbrev?)
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
DBrefsect2*)
| DBrefsect2+))
];;
type DBrefsection =
[
(DBrefsectioninfo? (DBtitle DBsubtitle? DBtitleabbrev?)
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
DBrefsection*)
| DBrefsection+))
];;
type DBrefsynopsisdiv =
[
(DBrefsynopsisdivinfo? (DBtitle DBsubtitle? DBtitleabbrev?)?
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
DBrefsect2*)
| DBrefsect2+))
];;
type DBrefclass =
[
( Char | DBapplication )* ];;
type DBrefpurpose =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBindexterm | DBbeginpage )*
];;
type DBrefname =
[
( Char | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname )*
];;
type DBrefdescriptor =
[
( Char | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname )*
];;
type DBrefnamediv =
[
(DBrefdescriptor? DBrefname+ DBrefpurpose DBrefclass*
(DBremark | DBlink | DBolink | DBulink)*)
];;
type DBrefmiscinfo =
[
( Char | DBlink | DBolink | DBulink | DBemphasis | DBtrademark | DBreplaceable | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm )*
];;
type DBrefmeta =
[
(DBindexterm* DBrefentrytitle DBmanvolnum? DBrefmiscinfo*
DBindexterm*)
];;
type DBrefentry =
[
(DBbeginpage? DBindexterm* DBrefentryinfo? DBrefmeta?
(DBremark | DBlink | DBolink | DBulink)* DBrefnamediv
DBrefsynopsisdiv? (DBrefsect1+ | DBrefsection+))
];;
type DBseealsoie =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBseeie =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBtertiaryie =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBsecondaryie =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBprimaryie =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBindexentry =
[
(DBprimaryie (DBseeie | DBseealsoie)*
(DBsecondaryie (DBseeie | DBseealsoie | DBtertiaryie)*)*)
];;
type DBindexdiv =
[
((DBtitle DBsubtitle? DBtitleabbrev?)?
((DBitemizedlist | DBorderedlist | DBvariablelist | DBsimplelist
| DBliterallayout | DBprogramlisting | DBprogramlistingco
| DBscreen | DBscreenco | DBscreenshot | DBsynopsis
| DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis
| DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis
| DBmethodsynopsis | DBformalpara | DBpara | DBsimpara
| DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBanchor | DBremark | DBlink | DBolink | DBulink | DBbeginpage)*
(DBindexentry+ | DBsegmentedlist)))
];;
type DBsetindex =
[
(DBsetindexinfo? (DBtitle DBsubtitle? DBtitleabbrev?)?
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara | DBpara
| DBsimpara | DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBequation | DBexample | DBfigure | DBtable | DBmsgset
| DBprocedure | DBsidebar | DBqandaset | DBanchor | DBbridgehead
| DBremark | DBhighlights | DBabstract | DBauthorblurb
| DBepigraph | DBindexterm | DBbeginpage)*
(DBindexdiv* | DBindexentry*))
];;
type DBindex =
[
(DBindexinfo? (DBtitle DBsubtitle? DBtitleabbrev?)?
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara | DBpara
| DBsimpara | DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBequation | DBexample | DBfigure | DBtable | DBmsgset
| DBprocedure | DBsidebar | DBqandaset | DBanchor | DBbridgehead
| DBremark | DBhighlights | DBabstract | DBauthorblurb
| DBepigraph | DBindexterm | DBbeginpage)*
(DBindexdiv* | DBindexentry*))
];;
type DBglossdiv =
[
((DBtitle DBsubtitle? DBtitleabbrev?)
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara | DBpara
| DBsimpara | DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBequation | DBexample | DBfigure | DBtable | DBmsgset
| DBprocedure | DBsidebar | DBqandaset | DBanchor | DBbridgehead
| DBremark | DBhighlights | DBabstract | DBauthorblurb
| DBepigraph | DBindexterm | DBbeginpage)*
DBglossentry+)
];;
type DBglossary =
[
(DBglossaryinfo? (DBtitle DBsubtitle? DBtitleabbrev?)?
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara | DBpara
| DBsimpara | DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBequation | DBexample | DBfigure | DBtable | DBmsgset
| DBprocedure | DBsidebar | DBqandaset | DBanchor | DBbridgehead
| DBremark | DBhighlights | DBabstract | DBauthorblurb
| DBepigraph | DBindexterm | DBbeginpage)*
(DBglossdiv+ | DBglossentry+) DBbibliography?)
];;
type DBbibliodiv =
[
((DBtitle DBsubtitle? DBtitleabbrev?)?
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara | DBpara
| DBsimpara | DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBequation | DBexample | DBfigure | DBtable | DBmsgset
| DBprocedure | DBsidebar | DBqandaset | DBanchor | DBbridgehead
| DBremark | DBhighlights | DBabstract | DBauthorblurb
| DBepigraph | DBindexterm | DBbeginpage)*
(DBbiblioentry | DBbibliomixed)+)
];;
type DBbibliography =
[
(DBbibliographyinfo? (DBtitle DBsubtitle? DBtitleabbrev?)?
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara | DBpara
| DBsimpara | DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBequation | DBexample | DBfigure | DBtable | DBmsgset
| DBprocedure | DBsidebar | DBqandaset | DBanchor | DBbridgehead
| DBremark | DBhighlights | DBabstract | DBauthorblurb
| DBepigraph | DBindexterm | DBbeginpage)*
(DBbibliodiv+ | (DBbiblioentry | DBbibliomixed)+))
];;
type DBsimplesect =
[
((DBtitle DBsubtitle? DBtitleabbrev?)
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara | DBpara
| DBsimpara | DBaddress | DBblockquote | DBgraphic | DBgraphicco
| DBmediaobject | DBmediaobjectco | DBinformalequation
| DBinformalexample | DBinformalfigure | DBinformaltable
| DBequation | DBexample | DBfigure | DBtable | DBmsgset
| DBprocedure | DBsidebar | DBqandaset | DBanchor | DBbridgehead
| DBremark | DBhighlights | DBabstract | DBauthorblurb
| DBepigraph | DBindexterm | DBbeginpage)+)
];;
type DBsect5 =
[
(DBsect5info? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBrefentry* | DBsimplesect*))
| DBrefentry+ | DBsimplesect+)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBsect4 =
[
(DBsect4info? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBrefentry* | DBsect5* | DBsimplesect*))
| DBrefentry+ | DBsect5+ | DBsimplesect+)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBsect3 =
[
(DBsect3info? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBrefentry* | DBsect4* | DBsimplesect*))
| DBrefentry+ | DBsect4+ | DBsimplesect+)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBsect2 =
[
(DBsect2info? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBrefentry* | DBsect3* | DBsimplesect*))
| DBrefentry+ | DBsect3+ | DBsimplesect+)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBsect1 =
[
(DBsect1info? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBrefentry* | DBsect2* | DBsimplesect*))
| DBrefentry+ | DBsect2+ | DBsimplesect+)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBsectioninfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBsection =
[
(DBsectioninfo? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBrefentry* | DBsection* | DBsimplesect*))
| DBrefentry+ | DBsection+ | DBsimplesect+)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBsect5info =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBsect4info =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBsect3info =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBsect2info =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBsect1info =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBreferenceinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBrefsynopsisdivinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBrefsect3info =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBrefsect2info =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBrefsect1info =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBrefsectioninfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBrefentryinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBprefaceinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBpartinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBsetindexinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBindexinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBglossaryinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBchapterinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBbibliographyinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBappendixinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBpartintro =
[
((DBtitle DBsubtitle? DBtitleabbrev?)?
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBsect1* | DBrefentry* | DBsimplesect* | DBsection*))
| (DBsect1+ | DBrefentry+ | DBsimplesect+ | DBsection+)))
];;
type DBreference =
[
(DBbeginpage? DBreferenceinfo? (DBtitle DBsubtitle? DBtitleabbrev?)
DBpartintro? DBrefentry+)
];;
type DBpreface =
[
(DBbeginpage? DBprefaceinfo? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
DBtocchap?
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBsect1* | DBrefentry* | DBsimplesect* | DBsection*))
| (DBsect1+ | DBrefentry+ | DBsimplesect+ | DBsection+))
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBpart =
[
(DBbeginpage? DBpartinfo? (DBtitle DBsubtitle? DBtitleabbrev?)
DBpartintro?
(DBappendix | DBchapter | DBtoc | DBlot | DBindex | DBglossary
| DBbibliography | DBarticle | DBpreface | DBrefentry
| DBreference)+)
];;
type DBchapter =
[
(DBbeginpage? DBchapterinfo? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
DBtocchap?
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBsect1* | DBrefentry* | DBsimplesect* | DBsection*))
| (DBsect1+ | DBrefentry+ | DBsimplesect+ | DBsection+))
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBappendix =
[
(DBbeginpage? DBappendixinfo? (DBtitle DBsubtitle? DBtitleabbrev?)
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*
DBtocchap?
(((DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis
| DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis
| DBdestructorsynopsis | DBmethodsynopsis | DBformalpara
| DBpara | DBsimpara | DBaddress | DBblockquote | DBgraphic
| DBgraphicco | DBmediaobject | DBmediaobjectco
| DBinformalequation | DBinformalexample | DBinformalfigure
| DBinformaltable | DBequation | DBexample | DBfigure | DBtable
| DBmsgset | DBprocedure | DBsidebar | DBqandaset | DBanchor
| DBbridgehead | DBremark | DBhighlights | DBabstract
| DBauthorblurb | DBepigraph | DBindexterm | DBbeginpage)+
(DBsect1* | DBrefentry* | DBsimplesect* | DBsection*))
| (DBsect1+ | DBrefentry+ | DBsimplesect+ | DBsection+))
(DBtoc | DBlot | DBindex | DBglossary | DBbibliography)*)
];;
type DBlotentry =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBlot =
[
(DBbeginpage? (DBtitle DBsubtitle? DBtitleabbrev?)? DBlotentry*) ];;
type DBtocback =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBtoclevel5 =
[
DBtocentry+ ];;
type DBtoclevel4 =
[
(DBtocentry+ DBtoclevel5*) ];;
type DBtoclevel3 =
[
(DBtocentry+ DBtoclevel4*) ];;
type DBtoclevel2 =
[
(DBtocentry+ DBtoclevel3*) ];;
type DBtoclevel1 =
[
(DBtocentry+ DBtoclevel2*) ];;
type DBtocchap =
[
(DBtocentry+ DBtoclevel1*) ];;
type DBtocpart =
[
(DBtocentry+ DBtocchap*) ];;
type DBtocentry =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBtocfront =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBtoc =
[
(DBbeginpage? (DBtitle DBsubtitle? DBtitleabbrev?)? DBtocfront*
(DBtocpart | DBtocchap)* DBtocback*)
];;
type DBcolophon =
[
((DBtitle DBsubtitle? DBtitleabbrev?)?
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBformalpara | DBpara | DBsimpara | DBblockquote)+)
];;
type DBdedication =
[
((DBtitle DBsubtitle? DBtitleabbrev?)?
(DBcalloutlist | DBglosslist | DBitemizedlist | DBorderedlist
| DBsegmentedlist | DBsimplelist | DBvariablelist | DBcaution
| DBimportant | DBnote | DBtip | DBwarning | DBliterallayout
| DBprogramlisting | DBprogramlistingco | DBscreen | DBscreenco
| DBscreenshot | DBformalpara | DBpara | DBsimpara | DBblockquote
| DBindexterm | DBbeginpage)+)
];;
type DBbookinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBbook =
[
((DBtitle DBsubtitle? DBtitleabbrev?)? DBbookinfo?
(DBdedication | DBtoc | DBlot | DBglossary | DBbibliography
| DBpreface | DBchapter | DBreference | DBpart | DBarticle
| DBappendix | DBindex | DBsetindex | DBcolophon)*)
];;
type DBsetinfo =
[
(DBgraphic | DBmediaobject | DBlegalnotice | DBmodespec
| DBsubjectset | DBkeywordset | DBitermset | DBabbrev | DBabstract
| DBaddress | DBartpagenums | DBauthor | DBauthorgroup
| DBauthorinitials | DBbibliomisc | DBbiblioset | DBcollab
| DBconfgroup | DBcontractnum | DBcontractsponsor | DBcopyright
| DBcorpauthor | DBcorpname | DBdate | DBedition | DBeditor
| DBinvpartnumber | DBisbn | DBissn | DBissuenum | DBorgname
| DBbiblioid | DBcitebiblioid | DBbibliosource | DBbibliorelation
| DBbibliocoverage | DBothercredit | DBpagenums | DBprinthistory
| DBproductname | DBproductnumber | DBpubdate | DBpublisher
| DBpublishername | DBpubsnumber | DBreleaseinfo | DBrevhistory
| DBseriesvolnums | DBsubtitle | DBtitle | DBtitleabbrev
| DBvolumenum | DBcitetitle | DBpersonname | DBhonorific
| DBfirstname | DBsurname | DBlineage | DBothername
| DBaffiliation | DBauthorblurb | DBcontrib | DBindexterm)+
];;
type DBset =
[
((DBtitle DBsubtitle? DBtitleabbrev?)? DBsetinfo? DBtoc? DBbook+
DBsetindex?)
];;
type DBseealso =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBsee =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBtertiary =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBsecondary =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBprimary =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject )*
];;
type DBindexterm =
[
(DBprimary?
((DBsecondary
((DBtertiary (DBsee | DBseealso+)?) | DBsee | DBseealso+)?)
| DBsee | DBseealso+)?)
];;
type DBbeginpage =
[
];;
type DBanchor =
[
];;
type DBxref =
[
];;
type DBfootnoteref =
[
];;
type DBulink =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBolink =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBlink =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBwordasword =
[
( Char | DBacronym | DBemphasis | DBtrademark | DBlink | DBolink | DBulink | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBtrademark =
[
( Char | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBemphasis )*
];;
type DBsuperscript =
[
( Char | DBlink | DBolink | DBulink | DBemphasis | DBreplaceable | DBsymbol | DBinlinegraphic | DBinlinemediaobject | DBanchor | DBremark | DBsubscript | DBsuperscript )*
];;
type DBsubscript =
[
( Char | DBlink | DBolink | DBulink | DBemphasis | DBreplaceable | DBsymbol | DBinlinegraphic | DBinlinemediaobject | DBanchor | DBremark | DBsubscript | DBsuperscript )*
];;
type DBquote =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBphrase =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBglossterm =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBforeignphrase =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBfirstterm =
[
( Char | DBacronym | DBemphasis | DBtrademark | DBlink | DBolink | DBulink | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBemphasis =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBcitetitle =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBmanvolnum =
[
( Char | DBacronym | DBemphasis | DBtrademark | DBlink | DBolink | DBulink | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBrefentrytitle =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBciterefentry =
[
(DBrefentrytitle DBmanvolnum?) ];;
type DBcitation =
[
( Char | DBfootnoteref | DBxref | DBabbrev | DBacronym | DBcitation | DBciterefentry | DBcitetitle | DBemphasis | DBfirstterm | DBforeignphrase | DBglossterm | DBfootnote | DBphrase | DBquote | DBtrademark | DBwordasword | DBpersonname | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBauthor | DBauthorinitials | DBcorpauthor | DBmodespec | DBothercredit | DBproductname | DBproductnumber | DBrevhistory | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBinlineequation | DBsynopsis | DBcmdsynopsis | DBfuncsynopsis | DBclasssynopsis | DBfieldsynopsis | DBconstructorsynopsis | DBdestructorsynopsis | DBmethodsynopsis | DBindexterm | DBbeginpage )*
];;
type DBacronym =
[
( Char | DBacronym | DBemphasis | DBtrademark | DBlink | DBolink | DBulink | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBabbrev =
[
( Char | DBacronym | DBemphasis | DBtrademark | DBlink | DBolink | DBulink | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBuserinput =
[
( Char | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage | DBco )*
];;
type DBtype =
[
( Char | DBreplaceable | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBtoken =
[
( Char | DBreplaceable | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBsystemitem =
[
( Char | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage | DBacronym | DBco )*
];;
type DBsymbol =
[
( Char | DBreplaceable | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBstructname =
[
( Char | DBreplaceable | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBstructfield =
[
( Char | DBreplaceable | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBsgmltag =
[
( Char | DBreplaceable | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBreturnvalue =
[
( Char | DBreplaceable | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBreplaceable =
[
( Char | DBlink | DBolink | DBulink | DBoptional | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBco )*
];;
type DBproperty =
[
( Char | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBprompt =
[
( Char | DBreplaceable | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage | DBco )*
];;
type DBparameter =
[
( Char | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBoptional =
[
( Char | DBlink | DBolink | DBulink | DBaction | DBapplication | DBclassname | DBmethodname | DBinterfacename | DBexceptionname | DBooclass | DBoointerface | DBooexception | DBcommand | DBcomputeroutput | DBdatabase | DBemail | DBenvar | DBerrorcode | DBerrorname | DBerrortype | DBerrortext | DBfilename | DBfunction | DBguibutton | DBguiicon | DBguilabel | DBguimenu | DBguimenuitem | DBguisubmenu | DBhardware | DBinterface | DBkeycap | DBkeycode | DBkeycombo | DBkeysym | DBliteral | DBconstant | DBmarkup | DBmedialabel | DBmenuchoice | DBmousebutton | DBoption | DBoptional | DBparameter | DBprompt | DBproperty | DBreplaceable | DBreturnvalue | DBsgmltag | DBstructfield | DBstructname | DBsymbol | DBsystemitem | DBtoken | DBtype | DBuserinput | DBvarname | DBanchor | DBremark | DBsubscript | DBsuperscript | DBinlinegraphic | DBinlinemediaobject | DBindexterm | DBbeginpage )*
];;
type DBoption =