/*
**	$VER: dtex.h 23.03
**
**	Misc. definitions to be used with
**	iX-Guide datatypes and export modules
**						  v     ,
**	Copyright (c) 1997 by Ivan Sturlic
*/

#ifndef DTEX_DTEX_H
#define DTEX_DTEX_H

/*
** Parser entry information
*/
struct iX_EntryInfo {
					ULONG	ei_Pos;		// entry position relative to ci_Data
					UWORD	ei_Len;		// length of entry data
					UBYTE	ei_ID;		// entry ID
					UBYTE	ei_Flags;		// misc flags for entry
				};

/*
** ei_Flags
*/

#define EF_NUMBER		0x01		// ei_Pos is the number (not position of string)
#define EF_PERCENT		0x02		// number is percentage
#define EF_ENDBLOCK		0x04		// this tag is block end (e.g. -NODE)
#define EF_TAB			0x08		// ET_SPC is actually tab character
#define EF_NOVALUE		0x10		// argument has no value
#define EF_STRING		0x20		// argument is string

/*
** Level 1 information about some chunk of source in format
** recognized by iX-Guide (array of iX_EntryInfo).
*/
struct iX_ChunkInfo	{
					STRPTR				ci_Data;		// pointer to source buffer
					ULONG				ci_DataLen;	// size of source buffer
					ULONG				ci_EntryNum;	// number of entries
					struct iX_EntryInfo		*ci_EI;		// iX_EntryInfo array
					STRPTR				ci_Name;		// name of this chunk (node name)
				};

/*
** Shortcuts for easier coding (variable 'ci' is pointer to iX_ChunkInfo)
*/

#define eID(x)			ci->ci_EI[x].ei_ID
#define ePOS(x)		ci->ci_EI[x].ei_Pos
#define eLEN(x)		ci->ci_EI[x].ei_Len
#define eFLG(x)		ci->ci_EI[x].ei_Flags
#define eDATA(x)		(ci->ci_Data+ci->ci_EI[x].ei_Pos)
#define eTAGID(x)		ci->ci_EI[x].ei_Pos
#define eATTRID(x)		ci->ci_EI[x].ei_Len
#define eNUM(x)		ci->ci_EI[x].ei_Pos

/*
** IXML node
** this structure contains basic information about one node in IXML guide
** It can also contain info about HEAD element if it exists in guide
** In that case nd_Node.ln_Name will contain string "___ixml_head"
*/

struct IXML_Node {
				struct Node		nd_Node;			// link to prev/next IXML_Node + name of node
				ULONG			nd_Begin;			// file position of node begin
				ULONG			nd_End;			// file position of end of node
};

/*
** iX_Alias structure used in list of macros, alises etc.
*/

struct iX_Alias {
				struct MinNode		al_Node;
				STRPTR			al_Alias;
				STRPTR			al_Real;		
};

/*
** Entry types (iX_EntryInfo.ei_ID)
*/

#define ET_TAG				1		// beginning of tag
#define ET_ENDTAG			2		// tag end
#define ET_ATTR			3		// tag attribute
#define ET_WORD			4		// word
#define ET_SPC				5		// space character(s)
#define ET_RTRN			6		// new line character
#define ET_END				7		// end of entry array

/*
** IXML tag IDs
*/

#define TAG_IXML			1
#define TAG_HEAD			2
#define TAG_NODE			3
#define TAG_DATABASE		4
#define TAG_DOCUMENT		5
#define TAG_BASE			6
#define TAG_SCREEN			7
#define TAG_MACRO			8
#define TAG_ALIAS			9
#define TAG_REXX			10
#define TAG_SYSTEM			11
#define TAG_ANIMSCRIPT		12
#define TAG_MAP			13
#define TAG_H1				14
#define TAG_H2				15
#define TAG_H3				16
#define TAG_H4				17
#define TAG_H5				18
#define TAG_H6				19
#define TAG_F1				20
#define TAG_F2				21
#define TAG_F3				22
#define TAG_F4				23
#define TAG_F5				24
#define TAG_F6				25
#define TAG_X1				26
#define TAG_X2				27
#define TAG_X3				28
#define TAG_X4				29
#define TAG_X5				30
#define TAG_X6				31
#define TAG_CODE			32
#define TAG_DEFF			33
#define TAG_FONT			34
#define TAG_B				35
#define TAG_I				36
#define TAG_U				37
#define TAG_S				38
#define TAG_D				39
#define TAG_DIV			40
#define TAG_CENTER			41
#define TAG_A				42
#define TAG_IMG			43
#define TAG_ASEQUENCE		44
#define TAG_AREA			45
#define TAG_HR				46
#define TAG_BR				47
#define TAG_P				48
#define TAG_PRE			49
#define TAG_UL				50
#define TAG_LI				51
#define TAG_RECT			52
#define TAG_INDENT			53
#define TAG_TABLE			54
#define TAG_COLGROUP		55
#define TAG_COL			56
#define TAG_TBODY			57
#define TAG_TR				58
#define TAG_TD				59
#define TAG_FRAMESET		60
#define TAG_FRAME			61
#define TAG_NOBR			62

/*
** IXML attribute IDs
*/

#define TA_NAME			1
#define TA_TITLE			2
#define TA_PREV			3
#define TA_NEXT			4
#define TA_AUTHOR			5
#define TA_VERSION			6
#define TA_COPYRIGHT		7
#define TA_WORDWRAP			8
#define TA_INDEX			9
#define TA_HELP			10
#define TA_TOC				11
#define TA_VSPACING			12
#define TA_LEFT			13
#define TA_TOP				14
#define TA_WIDTH			15
#define TA_HEIGHT			16
#define TA_TABSIZE			17
#define TA_OUTPUT			18
#define TA_ALIGN			19
#define TA_VALIGN			20
#define TA_BACKGROUND		21
#define TA_BGCOLOR			22
#define TA_TEXTFG			23
#define TA_TEXTBG			24
#define TA_TEXTSC			25
#define TA_CODESET			26
#define TA_USEBLANKS		27
#define TA_LINKPADDING		28
#define TA_LINKFGCOL		29
#define TA_LINKBG			30
#define TA_LINKBGCOL		31
#define TA_LINKFGCOLSEL		32
#define TA_LINKBGSEL		33
#define TA_LINKBGCOLSEL		34
#define TA_LINKFRAME		35
#define TA_LINKFCOL			36
#define TA_LINKFCOLSEL		37
#define TA_LINKBORDER		38
#define TA_BGSOUND			39
#define TA_BGSOUNDLOOP		40
#define TA_HREF			41
#define TA_MODE			42
#define TA_DEPTH			43
#define TA_PUBNAME			44
#define TA_USEPUBLIC		45
#define TA_DEFAULT			46
#define TA_REAL			47
#define TA_ALIAS			48
#define TA_PROGRAM			49
#define TA_INPUT			50
#define TA_LOOP			51
#define TA_BACKWARD			52
#define TA_PINGPONG			53
#define TA_SIZE			54
#define TA_COLOR			55
#define TA_BCOLOR			56
#define TA_SCOLOR			57
#define TA_SPACE			58
#define TA_DEFALIGN			59
#define TA_ACTION			60
#define TA_TARGET			61
#define TA_SRC				62
#define TA_TRANS			63
#define TA_BORDER			64
#define TA_ALT				65
#define TA_ISANIM			66
#define TA_ANIMSCRIPT		67
#define TA_ANIMSPEED		68
#define TA_USEMAP			69
#define TA_HSPACE			70
#define TA_VSPACE			71
#define TA_FRAME			72
#define TA_FCOLOR			73
#define TA_FCOLSEL			74
#define TA_FROM			75
#define TA_TO				76
#define TA_COORDS			77
#define TA_NOSHADE			78
#define TA_CLEAR			79
#define TA_CELLSPACING		80
#define TA_CELLPADDING		81
#define TA_RULES			82
#define TA_SPAN			83
#define TA_COLS			84
#define TA_ROWS			85
#define TA_NORESIZE			86
#define TA_COLSPAN			87
#define TA_ROWSPAN			88
#define TA_CELLBORDER		89

/*
** 'Guide' attributes
*/

#define XGDA_Dummy				(TAG_USER + 2200L)
#define XGDA_TabSize			(XGDA_Dummy + 1L)		// [.SG]
#define XGDA_MacroList			(XGDA_Dummy + 2L)		// [..G]
#define XGDA_CharNames			(XGDA_Dummy + 3L)		// [..G]
#define XGDA_ColorNames			(XGDA_Dummy + 4L)		// [..G]

#endif
