Structured Stream Definition

/*
**	(c) COPYRIGHT MIT 1995.
**	Please first read the full copyright statement in the file COPYRIGH.
*/
This module is a part of the Library of Common Code.
#ifndef HTSTRUCT_H
#define HTSTRUCT_H

#include "HTStream.h"
A structured object is something which can reasonably be represented in for eaxmple SGML. I'll rephrase that. A structured object is am ordered tree-structured arrangement of data which is representable as text. An example is the SGML parser which outputs to a Structured Object. A Structured object can output its contents to another Structured Object. It's a kind of typed stream. The architecure is largely Dan Conolly's. Elements and entities are passed to the sob by number, implying a knowledge of the DTD.

The Streuctured Stream is a subclass of a Generic Stream Object. As always, we don't have classes in basic C so we have to do this by hand!

NOTE: The put_block method was write, but this upset systems which had macros for write(). See the Generic Stream Definition for valid return codes.

typedef struct _HTStructured HTStructured;

typedef struct _HTStructuredClass {

    char * name;

    int (*flush)		PARAMS((HTStructured *	me));

    int (*_free)		PARAMS((HTStructured *	me));

    int (*abort)		PARAMS((HTStructured *	me, HTError e));

    int (*put_character)	PARAMS((HTStructured *	me,
					char		ch));

    int (*put_string)		PARAMS((HTStructured *	me,
					CONST char *	str));

    int (*put_block)		PARAMS((HTStructured *	me,
					CONST char *	str,
					int		len));
See the Generic Stream Definition for an explanation of these methods. Note that they all have a HTStructured object a the parameter, not a generic stream. This is to avoid incompatible pointer warnings
    void (*start_element)	PARAMS((HTStructured *	me,
					int		element_number,
					CONST BOOL *	attribute_present,
					CONST char **	attribute_value));

    void (*end_element)		PARAMS((HTStructured *	me,
					int		element_number));

    void (*put_entity)		PARAMS((HTStructured *	me,
					int		entity_number));
		
} HTStructuredClass;

#endif
End of Structured Stream definition