Copyright (c) 1994 James Clark

This directory contains a new SGML parser, tentatively called sp.

See the file COPYING for copying permission.

This is an alpha release.  The version number is given in the file
VERSION.

You will need a C++ compiler with good template support to build this.
gcc 2.6.0 works, but no earlier version of gcc will.  You will also an
iostream library (eg as provided by libg++ 2.6).  This distribution
builds on Solaris 2.3.  I expect it will build on SunOS 4 as well with
little difficulty, since I only recently changed to Solaris.  There
may well be problems on other platforms.  Other compilers I've used
are Sun C++ 4.0, CenterLine 2.0.4 (= cfront 3.0.2), and Lucid lcc 3.1.
I have in the past built it on an alpha with DEC C++.

I build by cd'ing to the build.gcc directory, and then running make.
This requires GNU make.  If you build in the current directory, you
may be able to build without GNU make.

`make check' runs some tests.  You shouldn't get any reports of
differences.

The source is structured as five directories: lib contains some
general purpose classes, mostly templates; parser contains the parser
proper; em contains an entity manager; app contains code useful for
applications; nsgmls contains an example application that behaves very
much like sgmls; rast contains an application that generates RAST.
There's a library for each directory other than rast and nsgmls.

The major problem in building is getting templates instantiated.  If
your compiler supports automatic template instantiation you can use
that.  However it's usually *very* slow.  It's a good idea to `close'
each library (ie include in it all the template instantiations that it
uses.)  Makefile.lib.CC shows a way to do this with cfront 3.0.2.

If you want multi-byte support use -DMULTI_BYTE.

The main parser interface is in parser/SgmlParser.H.  The events it
returns are described in parser/Event.H.

There is a man page for nsgmls (in nsgmls/nsgmls.man), and for rast
(in rast/rast.man).

James Clark
jjc@jclark.com
