/*							     Rich Hypertext object for libWWW
				  RICH HYPERTEXT OBJECT

 */

/*

   This is the C interface to the Objective-C (or whatever) HyperText class.

 */
#ifndef HTEXT_H
#define HTEXT_H
#include "HTAnchor.h"
#include "HTStream.h"

#ifdef SHORT_NAMES
#define HTMainText			HTMaText
#define HText_new			HTHTNew
#define HText_free			HTHTFree
#define HText_beginAppend		HTHTBeAp
#define HText_endAppend 		HTHTEnAp
#define HText_appendCharacter		HTHTApCh
#define HText_appendText		HTHTApTe
#define HText_appendParagraph		HTHTApPa
#define HText_beginAnchor		HTHTBeAn
#define HText_endAnchor 		HTHTEnAn
#define HText_dump			HTHTDump
#define HText_nodeAnchor		HTHTNoAn
#define HText_select			HTHTSele
#define HText_selectAnchor		HTHTSeAn
#define HText_replaceSel		HTHTRepl
#define HText_applyToSimilar		HTHTApTo
#define HText_unlinkSelection		HTHTUnSe
#define HText_linkSelTo 		HTHTLiSe
#define HText_referenceSelected 	HTHTRefS
#endif

#ifndef THINK_C
#ifndef HyperText		/* Objective C version defined HyperText */
typedef struct _HText HText;	/* Normal Library */
#endif
#else
class CHyperText;		/* Mac Think-C browser hook */
typedef CHyperText HText;
#endif

extern HText * HTMainText;		/* Pointer to current main text */

/*			Creation and deletion
**
**	Create hypertext object 				HText_new
*/
 extern HText * HText_new PARAMS((void));

/*	Free hypertext object					HText_free
*/
extern void	HText_free PARAMS((HText * me));


/*			Object Building methods
**			-----------------------
**
**	These are used by a parser to build the text in an object
**	HText_beginAppend must be called, then any combination of other
**	append calls, then HText_endAppend. This allows optimised
**	handling using buffers and caches which are flushed at the end.
*/
extern void HText_beginAppend PARAMS((HText * text));

extern void HText_endAppend PARAMS((HText * text));
extern void HText_doAbort PARAMS((HText * text));
extern void HText_clearOutForNewContents PARAMS((HText * text));

/*	Add one character
*/
extern void HText_appendCharacter PARAMS((HText * text, char ch));

/*	Add a zero-terminated string
*/
extern void HText_appendText PARAMS((HText * text, CONST char * str));
/*	Add a block.
*/
extern void HText_appendBlock PARAMS((HText * text, CONST char * str, int len));

/*	New Paragraph
*/
extern void HText_appendParagraph PARAMS((HText * text));

/*	Start/end sensitive text
**
** The anchor object is created and passed to HText_beginAnchor.
** The senstive text is added to the text object, and then HText_endAnchor
** is called. Anchors may not be nested.
*/

extern void HText_beginAnchor PARAMS((HText * text, char * anc));
extern void HText_endAnchor PARAMS((HText * text));


/*	Dump diagnostics to stderr
*/
extern void HText_dump PARAMS((HText * me));

extern char *HText_getText (HText *me);
extern int HText_getTextLength (HText *me);
extern char **HText_getPtrToText (HText *me);

/*		Browsing functions
**		------------------
*/

/*	Bring to front and highlight it
*/

extern BOOL HText_select PARAMS((HText * text));


#endif /* HTEXT_H */
/*

   end	*/
