// Copyright (c) 1999-2000 David Muse
// See the COPYING file for more information

#ifndef HTMLTAGS_H
#define HTMLTAGS_H

#include <inputoutput.h>

// The htmltags class provides functions for generating html tags.

// html 4.0

class	htmltags : virtual public inputoutput {
	public:
			// In this class, there is a function for each 
			// html tag and an enumeration type of all the 
			// attributes for each tag.  
			//
			// For each function, a container strstream is 
			// passed in as the first argument.  If the container 
			// is NULL, the tagis written to the browser, 
			// if it is non-NULL, the tag is written to the 
			// container.  
			//
			// Following the container is a NULL terminated list of 
			// attribute, value pairs.  Each attribute is assumed
			// to be one of the enumerated attributes for that
			// tag.  Each value is assumed to be a string.  There
			// are some attributes which have no associated
			// value.  
			//
			// Example function calls follow:
			//
			// table(NULL,table_border,"1",
			//		table_cellpadding,"0",
			//		table_cellspacing,"0",
			//		NULL);
			// bold(NULL,NULL);
			// hr(NULL,hr_size,"1",hr_noshade,NULL);



			// the following enumeration types are tag attributes
			// for each possible tag

			// frame tags
			typedef	enum {
				// standard attributes
					frameset_border=1,
					frameset_bordercolor,
					frameset_frameborder,
					frameset_framespacing,
					frameset_rows,
					frameset_cols,
				// css attributes
					frameset_class,
					frameset_id,
					frameset_style,
				// accessibility attributes
					frameset_title,
				// language attributes
					frameset_dir,
					frameset_lang,
					frameset_language
			} frameset_arg;
			
			
			typedef	enum {
				// standard attributes
					frame_bordercolor=1,
					frame_frameborder,
					frame_longdesc,
					frame_marginheight,
					frame_marginwidth,
					frame_name,
					frame_noresize,
					frame_scrolling,
					frame_src,		// required
				// css attributes
					frame_class,
					frame_id,
					frame_style,
				// accessibility attributes
					frame_title,
				// language attributes
					frame_dir,
					frame_lang,
					frame_language,
				// data attributes
					frame_datafld,
					frame_dataformats,
					frame_datasrc
			} frame_arg;
			
			
			typedef	enum {
				// css attributes
					noframes_class=1,
					noframes_id,
					noframes_style,
				// accessibility attributes
					noframes_title,
				// language attributes
					noframes_dir,
					noframes_lang,
					noframes_language,
				// event attributes
					noframes_onclick,
					noframes_ondblclick,
					noframes_onkeydown,
					noframes_onkeypress,
					noframes_onkeyup,
					noframes_onmousedown,
					noframes_onmousemove,
					noframes_onmouseout,
					noframes_onmouseover,
					noframes_onmouseup
			} noframes_arg;
			
			
			
			// head tags
			typedef	enum {
				// standard attributes
					head_profile=1,
				// css attributes
					head_class,
					head_id,
					head_style,
				// accessibility attributes
					head_title,
				// language attributes
					head_dir,
					head_lang,
					head_language
			} head_arg;
			
			
			typedef	enum {
				// standard attributes
					base_href=1,		// required
					base_target
			} base_arg;
			
			
			typedef	enum {
				// standard attributes
					isindex_action=1,
					isindex_prompt,
				// css attributes
					isindex_class,
					isindex_id,
					isindex_style,
				// accessibility attributes
					isindex_title,
				// language attributes
					isindex_dir,
					isindex_lang,
					isindex_language
			} isindex_arg;
			
			
			typedef	enum {
				// standard attributes
					link_charset=1,		// required
					link_disabled,
					link_href,
					link_hreflang,
					link_media,
					link_rel,
					link_rev,
					link_target,
					link_type,
				// css attributes
					link_class,
					link_id,
					link_style,
				// accessibility attributes
					link_title,
				// language attributes
					link_dir,
					link_lang,
					link_language,
				// event attributes
					link_onclick,
					link_ondblclick,
					link_onkeydown,
					link_onkeypress,
					link_onkeyup,
					link_onmousedown,
					link_onmousemove,
					link_onmouseout,
					link_onmouseover,
					link_onmouseup
			} link_arg;
			
			
			typedef	enum {
				// standard attributes
					meta_content=1,		// required
					meta_httpequiv,
					meta_name,
					meta_scheme,
					meta_url, 
				// css attributes
					meta_class,
					meta_id,
					meta_style,
				// accessibility attributes
					meta_title,
				// language attributes
					meta_dir,
					meta_lang,
					meta_language
			} meta_arg;
			
			
			typedef	enum {
				// standard attributes
					script_charset=1,
					script_defer,
					script_event,
					script_for,
					script_language,
					script_src,
					script_type,
				// css attributes
					script_class,
					script_id,
					script_style,
				// accessibility attributes
					script_title
			} script_arg;
			
			
			typedef	enum {
				// standard attributes
					style_disabled=1,
					style_media,
					style_title,
					style_type,		// required
				// language attributes
					style_dir,
					style_lang,
					style_language
			} style_arg;
			
			
			typedef	enum {
				// css attributes
					title_class=1,
					title_id,
					title_style,
				// accessibility attributes
					title_title,
				// language attributes
					title_dir,
					title_lang,
					title_language
			} title_arg;
			
			
			
			// body tags
			typedef	enum {
				// standard attributes
					body_background=1, 
					body_bgcolor, 
					body_bgproperties, 
					body_link,
					body_alink,
					body_vlink,
					body_topmargin,
					body_bottommargin,
					body_leftmargin,
					body_rightmargin,
					body_marginheight,
					body_marginwidth,
					body_scroll,
					body_text,
				// css attributes
					body_class,
					body_id,
					body_style,
				// accessibility attributes
					body_title,
				// language attributes
					body_dir,
					body_lang,
					body_language
			} body_arg;
			
			
			
			// anchor tags
			typedef	enum {
				// standard attributes
					a_href=1,
					a_hreflang,
					a_charset,
					a_type,
					a_name,
					a_target,
					a_shape,
					a_coords,
					a_accesskey,
					a_tabindex,
					a_rel,
					a_rev,
				// css attributes
					a_class,
					a_id,
					a_style,
				// accessibility attributes
					a_title,
				// language attributes
					a_dir,
					a_lang,
					a_language,
				// event attributes
					a_onblur,
					a_onclick,
					a_ondblclick,
					a_onfocus,
					a_onhelp,
					a_onkeydown,
					a_onkeypress,
					a_onkeyup,
					a_onmousedown,
					a_onmousemove,
					a_onmouseout,
					a_onmouseover,
					a_onmouseup,
					a_onselectstart
			} a_arg;
			
			
			
			// block formatting tags
			typedef	enum {
				// css attributes
					address_class=1,
					address_id,
					address_style,
				// accessibility attributes
					address_title,
				// language attributes
					address_dir,
					address_lang,
					address_language,
				// event attributes
					address_onclick,
					address_ondblclick,
					address_ondragstart,
					address_onhelp,
					address_onkeydown,
					address_onkeypress,
					address_onkeyup,
					address_onmousedown,
					address_onmousemove,
					address_onmouseout,
					address_onmouseover,
					address_onmouseup,
					address_onselectstart
			} address_arg;
			
			
			typedef	enum {
				// standard attributes
					blockquote_cite=1,
				// css attributes
					blockquote_class,
					blockquote_id,
					blockquote_style,
				// accessibility attributes
					blockquote_title,
				// language attributes
					blockquote_dir,
					blockquote_lang,
					blockquote_language,
				// event attributes
					blockquote_onclick,
					blockquote_ondblclick,
					blockquote_ondragstart,
					blockquote_onhelp,
					blockquote_onkeydown,
					blockquote_onkeypress,
					blockquote_onkeyup,
					blockquote_onmousedown,
					blockquote_onmousemove,
					blockquote_onmouseout,
					blockquote_onmouseover,
					blockquote_onmouseup,
					blockquote_onselectstart
			} blockquote_arg;
			
			
			typedef	enum {
				// css attributes
					center_class=1,
					center_id,
					center_style,
				// accessibility attributes
					center_title,
				// language attributes
					center_dir,
					center_lang,
					center_language,
				// event attributes
					center_onclick,
					center_ondblclick,
					center_ondragstart,
					center_onhelp,
					center_onkeydown,
					center_onkeypress,
					center_onkeyup,
					center_onmousedown,
					center_onmousemove,
					center_onmouseout,
					center_onmouseover,
					center_onmouseup,
					center_onselectstart
			} center_arg;
			
			
			typedef	enum {
				// standard attributes
					h1_align=1,
					h1_clear,
				// css attributes
					h1_class,
					h1_id,
					h1_style,
				// accessibility attributes
					h1_title,
				// language attributes
					h1_dir,
					h1_lang,
					h1_language,
				// event attributes
					h1_onclick,
					h1_ondblclick,
					h1_ondragstart,
					h1_onhelp,
					h1_onkeydown,
					h1_onkeypress,
					h1_onkeyup,
					h1_onmousedown,
					h1_onmousemove,
					h1_onmouseout,
					h1_onmouseover,
					h1_onmouseup,
					h1_onselectstart
			} h1_arg;
			
			
			typedef	enum {
				// standard attributes
					h2_align=1,
					h2_clear,
				// css attributes
					h2_class,
					h2_id,
					h2_style,
				// accessibility attributes
					h2_title,
				// language attributes
					h2_dir,
					h2_lang,
					h2_language,
				// event attributes
					h2_onclick,
					h2_ondblclick,
					h2_ondragstart,
					h2_onhelp,
					h2_onkeydown,
					h2_onkeypress,
					h2_onkeyup,
					h2_onmousedown,
					h2_onmousemove,
					h2_onmouseout,
					h2_onmouseover,
					h2_onmouseup,
					h2_onselectstart
			} h2_arg;
			
			
			typedef	enum {
				// standard attributes
					h3_align=1,
					h3_clear,
				// css attributes
					h3_class,
					h3_id,
					h3_style,
				// accessibility attributes
					h3_title,
				// language attributes
					h3_dir,
					h3_lang,
					h3_language,
				// event attributes
					h3_onclick,
					h3_ondblclick,
					h3_ondragstart,
					h3_onhelp,
					h3_onkeydown,
					h3_onkeypress,
					h3_onkeyup,
					h3_onmousedown,
					h3_onmousemove,
					h3_onmouseout,
					h3_onmouseover,
					h3_onmouseup,
					h3_onselectstart
			} h3_arg;
			
			
			typedef	enum {
				// standard attributes
					h4_align=1,
					h4_clear,
				// css attributes
					h4_class,
					h4_id,
					h4_style,
				// accessibility attributes
					h4_title,
				// language attributes
					h4_dir,
					h4_lang,
					h4_language,
				// event attributes
					h4_onclick,
					h4_ondblclick,
					h4_ondragstart,
					h4_onhelp,
					h4_onkeydown,
					h4_onkeypress,
					h4_onkeyup,
					h4_onmousedown,
					h4_onmousemove,
					h4_onmouseout,
					h4_onmouseover,
					h4_onmouseup,
					h4_onselectstart
			} h4_arg;
			
			
			typedef	enum {
				// standard attributes
					h5_align=1,
					h5_clear,
				// css attributes
					h5_class,
					h5_id,
					h5_style,
				// accessibility attributes
					h5_title,
				// language attributes
					h5_dir,
					h5_lang,
					h5_language,
				// event attributes
					h5_onclick,
					h5_ondblclick,
					h5_ondragstart,
					h5_onhelp,
					h5_onkeydown,
					h5_onkeypress,
					h5_onkeyup,
					h5_onmousedown,
					h5_onmousemove,
					h5_onmouseout,
					h5_onmouseover,
					h5_onmouseup,
					h5_onselectstart
			} h5_arg;
			
			
			typedef	enum {
				// standard attributes
					h6_align=1,
					h6_clear,
				// css attributes
					h6_class,
					h6_id,
					h6_style,
				// accessibility attributes
					h6_title,
				// language attributes
					h6_dir,
					h6_lang,
					h6_language,
				// event attributes
					h6_onclick,
					h6_ondblclick,
					h6_ondragstart,
					h6_onhelp,
					h6_onkeydown,
					h6_onkeypress,
					h6_onkeyup,
					h6_onmousedown,
					h6_onmousemove,
					h6_onmouseout,
					h6_onmouseover,
					h6_onmouseup,
					h6_onselectstart
			} h6_arg;


			typedef	enum {
				// standard attributes
					marquee_align=1,
					marquee_loop,
					marquee_behavior,
					marquee_bgcolor,
					marquee_direction,
					marquee_height,
					marquee_width,
					marquee_vspace,
					marquee_hspace,
					marquee_scrollamount,
					marquee_scrolldelay,
					marquee_truespeed,
				// css attributes
					marquee_class,
					marquee_id,
					marquee_style,
				// accessibility attributes
					marquee_title,
				// language attributes
					marquee_dir,
					marquee_lang,
					marquee_language,
				// event attributes
					marquee_onafterupdate,
					marquee_onblur,
					marquee_onbounce,
					marquee_onclick,
					marquee_ondblclick,
					marquee_ondragstart,
					marquee_onfinish,
					marquee_onfocus,
					marquee_onhelp,
					marquee_onkeydown,
					marquee_onkeypress,
					marquee_onkeyup,
					marquee_onmousedown,
					marquee_onmousemove,
					marquee_onmouseout,
					marquee_onmouseover,
					marquee_onmouseup,
					marquee_onresize,
					marquee_onrowenter,
					marquee_onrowexit,
					marquee_onselectstart,
					marquee_onstart
			} marquee_arg;


			typedef	enum {
				// standard attributes
					multicol_cols=1,	// required
					multicol_gutter,
					multicol_width,
				// css attributes
					multicol_class,
					multicol_id,
					multicol_style,
				// accessibility attributes
					multicol_title
			} multicol_arg;


			typedef	enum {
				// standard attributes
					p_align=1, 		
					p_clear,
				// css attributes
					p_class,
					p_id,
					p_style,
				// accessibility attributes
					p_title,
				// language attributes
					p_dir,
					p_lang,
					p_language
			} p_arg;


			typedef	enum {
				// standard attributes
					pre_width=1,
				// css attributes
					pre_class,
					pre_id,
					pre_style,
				// accessibility attributes
					pre_title,
				// language attributes
					pre_dir,
					pre_lang,
					pre_language,
				// event attributes
					pre_onclick,
					pre_ondblclick,
					pre_ondragstart,
					pre_onhelp,
					pre_onkeydown,
					pre_onkeypress,
					pre_onkeyup,
					pre_onmousedown,
					pre_onmousemove,
					pre_onmouseout,
					pre_onmouseover,
					pre_onmouseup,
					pre_onselectstart
			} pre_arg;



			// embedded functionality tags
			typedef	enum {
				// standard attributes
					embed_src=1,		// required
					embed_height,		// required
					embed_width,		// required
				// css attributes
					embed_class,
					embed_id,
					embed_style,
				// accessibility attributes
					embed_title,
				// language attributes
					embed_dir,
					embed_lang,
					embed_language
			} embed_arg;


			typedef	enum {
				// standard attributes
					applet_code=1,		// required
					applet_codebase,
					applet_archive,
					applet_cabbase,
					applet_src,
					applet_height,		// required
					applet_width,		// required
					applet_vspace,
					applet_hspace,
					applet_align,
					applet_alt,
					applet_name,
					applet_object,
					applet_mayscript,
				// css attributes
					applet_class,
					applet_id,
					applet_style,
				// accessibility attributes
					applet_title,
				// language attributes
					applet_dir,
					applet_lang,
					applet_language,
				// event attributes
					applet_onafterupdate,
					applet_onbeforeupdate,
					applet_onblur,
					applet_onclick,
					applet_ondblclick,
					applet_ondragstart,
					applet_onerrorupdate,
					applet_onfocus,
					applet_onhelp,
					applet_onkeydown,
					applet_onkeypress,
					applet_onkeyup,
					applet_onmousedown,
					applet_onmousemove,
					applet_onmouseout,
					applet_onmouseover,
					applet_onmouseup,
					applet_onreadystatechange,
					applet_onresize,
					applet_onrowenter,
					applet_onrowexit
			} applet_arg;


			typedef	enum {
				// standard attributes
					param_name=1,		// required
					param_type,
					param_value,
					param_valuetype,
				// css attributes
					param_class,
					param_id,
					param_style,
				// accessibility attributes
					param_title
			} param_arg;



			// character formatting tags
			typedef	enum {
				// css attributes
					abbr_class=1,
					abbr_id,
					abbr_style,
				// accessibility attributes
					abbr_title,
				// language attributes
					abbr_dir,
					abbr_lang,
					abbr_language,
				// event attributes
					abbr_onclick,
					abbr_ondblclick,
					abbr_onkeydown,
					abbr_onkeypress,
					abbr_onkeyup,
					abbr_onmousedown,
					abbr_onmousemove,
					abbr_onmouseout,
					abbr_onmouseover,
					abbr_onmouseup
			} abbr_arg;


			typedef	enum {
				// css attributes
					acronym_class=1,
					acronym_id,
					acronym_style,
				// accessibility attributes
					acronym_title,
				// language attributes
					acronym_dir,
					acronym_lang,
					acronym_language,
				// event attributes
					acronym_onclick,
					acronym_ondblclick,
					acronym_ondragstart,
					acronym_onhelp,
					acronym_onkeydown,
					acronym_onkeypress,
					acronym_onkeyup,
					acronym_onmousedown,
					acronym_onmousemove,
					acronym_onmouseout,
					acronym_onmouseover,
					acronym_onmouseup,
					acronym_onselectstart
			} acronym_arg;


			typedef	enum {
				// css attributes
					b_class=1,
					b_id,
					b_style,
				// accessibility attributes
					b_title,
				// language attributes
					b_dir,
					b_lang,
					b_language,
				// event attributes
					b_onclick,
					b_ondblclick,
					b_ondragstart,
					b_onhelp,
					b_onkeydown,
					b_onkeypress,
					b_onkeyup,
					b_onmousedown,
					b_onmousemove,
					b_onmouseout,
					b_onmouseover,
					b_onmouseup,
					b_onselectstart
			} b_arg;


			typedef	enum {
				// css attributes
					big_class=1,
					big_id,
					big_style,
				// accessibility attributes
					big_title,
				// language attributes
					big_dir,
					big_lang,
					big_language,
				// event attributes
					big_onclick,
					big_ondblclick,
					big_ondragstart,
					big_onhelp,
					big_onkeydown,
					big_onkeypress,
					big_onkeyup,
					big_onmousedown,
					big_onmousemove,
					big_onmouseout,
					big_onmouseover,
					big_onmouseup,
					big_onselectstart
			} big_arg;


			typedef	enum {
				// css attributes
					blink_class=1,
					blink_id,
					blink_style,
				// accessibility attributes
					blink_title,
				// language attributes
					blink_dir,
					blink_lang,
					blink_language
			} blink_arg;


			typedef	enum {
				// css attributes
					cite_class=1,
					cite_id,
					cite_style,
				// accessibility attributes
					cite_title,
				// language attributes
					cite_dir,
					cite_lang,
					cite_language,
				// event attributes
					cite_onclick,
					cite_ondblclick,
					cite_ondragstart,
					cite_onhelp,
					cite_onkeydown,
					cite_onkeypress,
					cite_onkeyup,
					cite_onmousedown,
					cite_onmousemove,
					cite_onmouseout,
					cite_onmouseover,
					cite_onmouseup,
					cite_onselectstart
			} cite_arg;


			typedef	enum {
				// css attributes
					code_class=1,
					code_id,
					code_style,
				// accessibility attributes
					code_title,
				// language attributes
					code_dir,
					code_lang,
					code_language,
				// event attributes
					code_onclick,
					code_ondblclick,
					code_ondragstart,
					code_onhelp,
					code_onkeydown,
					code_onkeypress,
					code_onkeyup,
					code_onmousedown,
					code_onmousemove,
					code_onmouseout,
					code_onmouseover,
					code_onmouseup,
					code_onselectstart
			} code_arg;


			typedef	enum {
				// css attributes
					dfn_class=1,
					dfn_id,
					dfn_style,
				// accessibility attributes
					dfn_title,
				// language attributes
					dfn_dir,
					dfn_lang,
					dfn_language,
				// event attributes
					dfn_onclick,
					dfn_ondblclick,
					dfn_ondragstart,
					dfn_onhelp,
					dfn_onkeydown,
					dfn_onkeypress,
					dfn_onkeyup,
					dfn_onmousedown,
					dfn_onmousemove,
					dfn_onmouseout,
					dfn_onmouseover,
					dfn_onmouseup,
					dfn_onselectstart
			} dfn_arg;


			typedef	enum {
				// css attributes
					em_class=1,
					em_id,
					em_style,
				// accessibility attributes
					em_title,
				// language attributes
					em_dir,
					em_lang,
					em_language,
				// event attributes
					em_onclick,
					em_ondblclick,
					em_ondragstart,
					em_onhelp,
					em_onkeydown,
					em_onkeypress,
					em_onkeyup,
					em_onmousedown,
					em_onmousemove,
					em_onmouseout,
					em_onmouseover,
					em_onmouseup,
					em_onselectstart
			} em_arg;


			typedef	enum {
				// standard attributes
					font_color=1, 
					font_face, 
					font_pointsize, 
					font_size,
				// css attributes
					font_class,
					font_id,
					font_style,
				// accessibility attributes
					font_title,
				// language attributes
					font_dir,
					font_lang,
					font_language
			} font_arg;


			typedef	enum {
				// css attributes
					i_class=1,
					i_id,
					i_style,
				// accessibility attributes
					i_title,
				// language attributes
					i_dir,
					i_lang,
					i_language,
				// event attributes
					i_onclick,
					i_ondblclick,
					i_ondragstart,
					i_onhelp,
					i_onkeydown,
					i_onkeypress,
					i_onkeyup,
					i_onmousedown,
					i_onmousemove,
					i_onmouseout,
					i_onmouseover,
					i_onmouseup,
					i_onselectstart
			} i_arg;


			typedef	enum {
				// css attributes
					kbd_class=1,
					kbd_id,
					kbd_style,
				// accessibility attributes
					kbd_title,
				// language attributes
					kbd_dir,
					kbd_lang,
					kbd_language,
				// event attributes
					kbd_onclick,
					kbd_ondblclick,
					kbd_ondragstart,
					kbd_onhelp,
					kbd_onkeydown,
					kbd_onkeypress,
					kbd_onkeyup,
					kbd_onmousedown,
					kbd_onmousemove,
					kbd_onmouseout,
					kbd_onmouseover,
					kbd_onmouseup,
					kbd_onselectstart
			} kbd_arg;


			typedef	enum {
				// standard attributes
					q_cite=1,
				// css attributes
					q_class,
					q_id,
					q_style,
				// accessibility attributes
					q_title,
				// language attributes
					q_dir,
					q_lang,
					q_language,
				// event attributes
					q_onclick,
					q_ondblclick,
					q_ondragstart,
					q_onhelp,
					q_onkeydown,
					q_onkeypress,
					q_onkeyup,
					q_onmousedown,
					q_onmousemove,
					q_onmouseout,
					q_onmouseover,
					q_onmouseup,
					q_onselectstart
			} q_arg;


			typedef	enum {
				// css attributes
					samp_class=1,
					samp_id,
					samp_style,
				// accessibility attributes
					samp_title,
				// language attributes
					samp_dir,
					samp_lang,
					samp_language,
				// event attributes
					samp_onclick,
					samp_ondblclick,
					samp_ondragstart,
					samp_onhelp,
					samp_onkeydown,
					samp_onkeypress,
					samp_onkeyup,
					samp_onmousedown,
					samp_onmousemove,
					samp_onmouseout,
					samp_onmouseover,
					samp_onmouseup,
					samp_onselectstart
			} samp_arg;


			typedef	enum {
				// css attributes
					small_class=1,
					small_id,
					small_style,
				// accessibility attributes
					small_title,
				// language attributes
					small_dir,
					small_lang,
					small_language,
				// event attributes
					small_onclick,
					small_ondblclick,
					small_ondragstart,
					small_onhelp,
					small_onkeydown,
					small_onkeypress,
					small_onkeyup,
					small_onmousedown,
					small_onmousemove,
					small_onmouseout,
					small_onmouseover,
					small_onmouseup,
					small_onselectstart
			} small_arg;


			typedef	enum {
				// css attributes
					strike_class=1,
					strike_id,
					strike_style,
				// accessibility attributes
					strike_title,
				// language attributes
					strike_dir,
					strike_lang,
					strike_language,
				// event attributes
					strike_onclick,
					strike_ondblclick,
					strike_ondragstart,
					strike_onhelp,
					strike_onkeydown,
					strike_onkeypress,
					strike_onkeyup,
					strike_onmousedown,
					strike_onmousemove,
					strike_onmouseout,
					strike_onmouseover,
					strike_onmouseup,
					strike_onselectstart
			} strike_arg;


			typedef	enum {
				// css attributes
					strong_class=1,
					strong_id,
					strong_style,
				// accessibility attributes
					strong_title,
				// language attributes
					strong_dir,
					strong_lang,
					strong_language,
				// event attributes
					strong_onclick,
					strong_ondblclick,
					strong_ondragstart,
					strong_onhelp,
					strong_onkeydown,
					strong_onkeypress,
					strong_onkeyup,
					strong_onmousedown,
					strong_onmousemove,
					strong_onmouseout,
					strong_onmouseover,
					strong_onmouseup,
					strong_onselectstart
			} strong_arg;


			typedef	enum {
				// css attributes
					sub_class=1,
					sub_id,
					sub_style,
				// accessibility attributes
					sub_title,
				// language attributes
					sub_dir,
					sub_lang,
					sub_language,
				// event attributes
					sub_onclick,
					sub_ondblclick,
					sub_ondragstart,
					sub_onhelp,
					sub_onkeydown,
					sub_onkeypress,
					sub_onkeyup,
					sub_onmousedown,
					sub_onmousemove,
					sub_onmouseout,
					sub_onmouseover,
					sub_onmouseup,
					sub_onselectstart
			} sub_arg;


			typedef	enum {
				// css attributes
					sup_class=1,
					sup_id,
					sup_style,
				// accessibility attributes
					sup_title,
				// language attributes
					sup_dir,
					sup_lang,
					sup_language,
				// event attributes
					sup_onclick,
					sup_ondblclick,
					sup_ondragstart,
					sup_onhelp,
					sup_onkeydown,
					sup_onkeypress,
					sup_onkeyup,
					sup_onmousedown,
					sup_onmousemove,
					sup_onmouseout,
					sup_onmouseover,
					sup_onmouseup,
					sup_onselectstart
			} sup_arg;


			typedef	enum {
				// css attributes
					tt_class=1,
					tt_id,
					tt_style,
				// accessibility attributes
					tt_title,
				// language attributes
					tt_dir,
					tt_lang,
					tt_language,
				// event attributes
					tt_onclick,
					tt_ondblclick,
					tt_ondragstart,
					tt_onhelp,
					tt_onkeydown,
					tt_onkeypress,
					tt_onkeyup,
					tt_onmousedown,
					tt_onmousemove,
					tt_onmouseout,
					tt_onmouseover,
					tt_onmouseup,
					tt_onselectstart
			} tt_arg;


			typedef	enum {
				// css attributes
					u_class=1,
					u_id,
					u_style,
				// accessibility attributes
					u_title,
				// language attributes
					u_dir,
					u_lang,
					u_language,
				// event attributes
					u_onclick,
					u_ondblclick,
					u_ondragstart,
					u_onhelp,
					u_onkeydown,
					u_onkeypress,
					u_onkeyup,
					u_onmousedown,
					u_onmousemove,
					u_onmouseout,
					u_onmouseover,
					u_onmouseup,
					u_onselectstart
			} u_arg;


			typedef	enum {
				// standard attributes
					iframe_frameborder=1,
					iframe_longdesc,
					iframe_marginheight,
					iframe_marginwidth,
					iframe_name,
					iframe_scrolling,
					iframe_height,
					iframe_width,
					iframe_vspace,
					iframe_hspace,
					iframe_align,
					iframe_src,		// required
				// css attributes
					iframe_class,
					iframe_id,
					iframe_style,
				// accessibility attributes
					iframe_title,
				// language attributes
					iframe_dir,
					iframe_lang,
					iframe_language
			} iframe_arg;


			typedef	enum {
				// css attributes
					var_class=1,
					var_id,
					var_style,
				// accessibility attributes
					var_title,
				// language attributes
					var_dir,
					var_lang,
					var_language,
				// event attributes
					var_onclick,
					var_ondblclick,
					var_ondragstart,
					var_onhelp,
					var_onkeydown,
					var_onkeypress,
					var_onkeyup,
					var_onmousedown,
					var_onmousemove,
					var_onmouseout,
					var_onmouseover,
					var_onmouseup,
					var_onselectstart
			} var_arg;



			// form tags
			typedef	enum {
				// standard attributes
					button_name=1,
					button_value,
					button_type,
					button_accesskey,
					button_tabindex,
					button_disabled,
				// css attributes
					button_class,
					button_id,
					button_style,
				// accessibility attributes
					button_title,
				// language attributes
					button_dir,
					button_lang,
					button_language,
				// event attributes
					button_onafterupdate,
					button_onbeforeupdate,
					button_onblur,
					button_onclick,
					button_ondblclick,
					button_ondragstart,
					button_onfocus,
					button_onhelp,
					button_onkeydown,
					button_onkeypress,
					button_onkeyup,
					button_onmousedown,
					button_onmousemove,
					button_onmouseout,
					button_onmouseover,
					button_onmouseup,
					button_onresize,
					button_onrowenter,
					button_onrowexit,
					button_onselectstart,
				// data attributes
					button_datafld,
					button_dataformats,
					button_datasrc
			} button_arg;

	
			typedef	enum {
				// standard attributes
					fieldset_align=1,
				// css attributes
					fieldset_class,
					fieldset_id,
					fieldset_style,
				// accessibility attributes
					fieldset_title,
				// language attributes
					fieldset_dir,
					fieldset_lang,
					fieldset_language,
				// event attributes
					fieldset_onblur,
					fieldset_onchange,
					fieldset_onclick,
					fieldset_ondblclick,
					fieldset_ondragstart,
					fieldset_onfilterchange,
					fieldset_onfocus,
					fieldset_onhelp,
					fieldset_onkeydown,
					fieldset_onkeypress,
					fieldset_onkeyup,
					fieldset_onmousedown,
					fieldset_onmousemove,
					fieldset_onmouseout,
					fieldset_onmouseover,
					fieldset_onmouseup,
					fieldset_onresize,
					fieldset_onscroll,
					fieldset_onselect,
					fieldset_onselectstart
			} fieldset_arg;


			typedef	enum {
				// standard attributes
					htmlarea_name=1,	// required
					htmlarea_rows,		// required
					htmlarea_cols,		// required
					htmlarea_accesskey,
					htmlarea_tabindex,
					htmlarea_disabled,
					htmlarea_readonly,
					htmlarea_wrap,
				// css attributes
					htmlarea_class,
					htmlarea_id,
					htmlarea_style,
				// accessibility attributes
					htmlarea_title,
				// language attributes
					htmlarea_dir,
					htmlarea_lang,
					htmlarea_language,
				// data attributes
					htmlarea_datafld,
					htmlarea_dataformats,
					htmlarea_datasrc
			} htmlarea_arg;


			typedef	enum {
				// standard attributes
					form_action=1,		// required
					form_target,
					form_name,
					form_method,
					form_acceptcharset,
					form_enctype,
				// css attributes
					form_class,
					form_id,
					form_style,
				// accessibility attributes
					form_title,
				// language attributes
					form_dir,
					form_lang,
					form_language,
				// event attributes
					form_onclick,
					form_ondblclick,
					form_ondragstart,
					form_onhelp,
					form_onkeydown,
					form_onkeypress,
					form_onkeyup,
					form_onmousedown,
					form_onmousemove,
					form_onmouseout,
					form_onmouseover,
					form_onmouseup,
					form_onreset,
					form_onselectstart,
					form_onsubmit
			} form_arg;


			typedef	enum {
				// standard attributes
					label_accesskey=1,
					label_for,
				// css attributes
					label_class,
					label_id,
					label_style,
				// accessibility attributes
					label_title,
				// language attributes
					label_dir,
					label_lang,
					label_language,
				// event attributes
					label_onblur,
					label_onclick,
					label_ondblclick,
					label_ondragstart,
					label_onfocus,
					label_onhelp,
					label_onkeydown,
					label_onkeypress,
					label_onkeyup,
					label_onmousedown,
					label_onmousemove,
					label_onmouseout,
					label_onmouseover,
					label_onmouseup,
					label_onselectstart
			} label_arg;


			typedef	enum {
				// standard attributes
					legend_accesskey=1,
					legend_align,
				// css attributes
					legend_class,
					legend_id,
					legend_style,
				// accessibility attributes
					legend_title,
				// language attributes
					legend_dir,
					legend_lang,
					legend_language,
				// event attributes
					legend_onclick,
					legend_ondblclick,
					legend_ondragstart,
					legend_onhelp,
					legend_onkeydown,
					legend_onkeypress,
					legend_onkeyup,
					legend_onmousedown,
					legend_onmousemove,
					legend_onmouseout,
					legend_onmouseover,
					legend_onmouseup
			} legend_arg;


			typedef	enum {
				// standard attributes
					optgroup_label=1,
					optgroup_disabled,
				// css attributes
					optgroup_class,
					optgroup_id,
					optgroup_style,
				// accessibility attributes
					optgroup_title,
				// language attributes
					optgroup_dir,
					optgroup_lang,
					optgroup_language,
				// event attributes
					optgroup_onclick,
					optgroup_ondblclick,
					optgroup_onkeydown,
					optgroup_onkeypress,
					optgroup_onkeyup,
					optgroup_onmousedown,
					optgroup_onmousemove,
					optgroup_onmouseout,
					optgroup_onmouseover,
					optgroup_onmouseup
			} optgroup_arg;


			typedef	enum {
				// standard attributes
					option_label=1,
					option_value,
					option_selected,
					option_disabled,
				// css attributes
					option_class,
					option_id,
					option_style,
				// accessibility attributes
					option_title,
				// language attributes
					option_dir,
					option_lang,
					option_language,
				// event attributes
					option_onclick,
					option_ondblclick,
					option_ondragstart,
					option_onkeydown,
					option_onkeypress,
					option_onkeyup,
					option_onmousedown,
					option_onmousemove,
					option_onmouseout,
					option_onmouseover,
					option_onmouseup,
					option_onselect,
					option_onselectstart
			} option_arg;


			typedef	enum {
				// standard attributes
					select_name=1,		// required
					select_accesskey,
					select_tabindex,
					select_disabled,
					select_align,
					select_size,
					select_multiple,
				// css attributes
					select_class,
					select_id,
					select_style,
				// accessibility attributes
					select_title,
				// language attributes
					select_dir,
					select_lang,
					select_language,
				// event attributes
					select_onafterupdate,
					select_onbeforeupdate,
					select_onblur,
					select_onchange,
					select_onclick,
					select_ondblclick,
					select_ondragstart,
					select_onfocus,
					select_onhelp,
					select_onkeydown,
					select_onkeypress,
					select_onkeyup,
					select_onmousedown,
					select_onmousemove,
					select_onmouseout,
					select_onmouseover,
					select_onmouseup,
					select_onresize,
					select_onrowenter,
					select_onrowexit,
					select_onselectstart,
				// data attributes
					select_datafld,
					select_dataformats,
					select_datasrc
			} select_arg;


			typedef	enum {
				// standard attributes
					input_type=1,		// required
					input_name,		// required
					input_value,
					input_size,
					input_maxlength,
					input_height,
					input_width,
					input_accesskey,
					input_tabindex,
					input_disabled,
					input_checked,
					input_readonly,
					input_align,
					input_alt,
					input_src,
					input_usemap,
					input_accept,
					input_border,
					input_cols,
					input_notab,
					input_rows,
					input_taborder,
					input_wrap,
				// css attributes
					input_class,
					input_id,
					input_style,
				// accessibility attributes
					input_title,
				// language attributes
					input_dir,
					input_lang,
					input_language,
				// event attributes
					input_onafterupdate,
					input_onbeforeupdate,
					input_onblur,
					input_onchange,
					input_onclick,
					input_ondblclick,
					input_ondragstart,
					input_onfocus,
					input_onhelp,
					input_onkeydown,
					input_onkeypress,
					input_onkeyup,
					input_onmousedown,
					input_onmousemove,
					input_onmouseout,
					input_onmouseover,
					input_onmouseup,
					input_onselect,
					input_onselectstart,
				// data attributes
					input_datafld,
					input_dataformats,
					input_datasrc
			} input_arg;



			// line breaking tags
			typedef	enum {
				// standard attributes
					br_clear=1,
				// css attributes
					br_class,
					br_id,
					br_style,
				// accessibility attributes
					br_title
			} br_arg;


			typedef	enum {
				// css attributes
					nolinebreak_class=1,
					nolinebreak_id,
					nolinebreak_style,
				// accessibility attributes
					nolinebreak_title,
				// language attributes
					nolinebreak_dir,
					nolinebreak_lang,
					nolinebreak_language
			} nolinebreak_arg;



			// list tags
			typedef	enum {
				// standard attributes
					ol_clear=1, 
					ol_compact, 
					ol_start, 
					ol_type,
				// css attributes
					ol_class,
					ol_id,
					ol_style,
				// accessibility attributes
					ol_title,
				// language attributes
					ol_dir,
					ol_lang,
					ol_language,
				// events attributes
					ol_onclick,
					ol_ondblclick,
					ol_ondragstart,
					ol_onhelp,
					ol_onkeydown,
					ol_onkeypress,
					ol_onkeyup,
					ol_onmousedown,
					ol_onmousemove,
					ol_onmouseout,
					ol_onmouseover,
					ol_onmouseup,
					ol_onselectstart
			} ol_arg;


			typedef	enum {
				// standard attributes
					ul_clear=1, 
					ul_compact, 
					ul_start, 
				// css attributes
					ul_class,
					ul_id,
					ul_style,
				// accessibility attributes
					ul_title,
				// language attributes
					ul_dir,
					ul_lang,
					ul_language,
				// events attributes
					ul_onclick,
					ul_ondblclick,
					ul_ondragstart,
					ul_onhelp,
					ul_onkeydown,
					ul_onkeypress,
					ul_onkeyup,
					ul_onmousedown,
					ul_onmousemove,
					ul_onmouseout,
					ul_onmouseover,
					ul_onmouseup,
					ul_onselectstart
			} ul_arg;


			typedef	enum {
				// standard attributes
					menu_compact=1, 
				// css attributes
					menu_class,
					menu_id,
					menu_style,
				// accessibility attributes
					menu_title,
				// language attributes
					menu_dir,
					menu_lang,
					menu_language,
				// events attributes
					menu_onclick,
					menu_ondblclick,
					menu_ondragstart,
					menu_onhelp,
					menu_onkeydown,
					menu_onkeypress,
					menu_onkeyup,
					menu_onmousedown,
					menu_onmousemove,
					menu_onmouseout,
					menu_onmouseover,
					menu_onmouseup,
					menu_onselectstart
			} menu_arg;


			typedef	enum {
				// standard attributes
					dir_compact=1, 
				// css attributes
					dir_class,
					dir_id,
					dir_style,
				// accessibility attributes
					dir_title,
				// language attributes
					dir_dir,
					dir_lang,
					dir_language,
				// events attributes
					dir_onclick,
					dir_ondblclick,
					dir_ondragstart,
					dir_onhelp,
					dir_onkeydown,
					dir_onkeypress,
					dir_onkeyup,
					dir_onmousedown,
					dir_onmousemove,
					dir_onmouseout,
					dir_onmouseover,
					dir_onmouseup,
					dir_onselectstart
			} dir_arg;


			typedef	enum {
				// standard attributes
					li_clear=1, 
					li_type, 
					li_value,
				// css attributes
					li_class,
					li_id,
					li_style,
				// accessibility attributes
					li_title,
				// language attributes
					li_dir,
					li_lang,
					li_language,
				// events attributes
					li_onclick,
					li_ondblclick,
					li_ondragstart,
					li_onhelp,
					li_onkeydown,
					li_onkeypress,
					li_onkeyup,
					li_onmousedown,
					li_onmousemove,
					li_onmouseout,
					li_onmouseover,
					li_onmouseup,
					li_onselectstart
			} li_arg;


			typedef	enum {
				// standard attributes
					dl_clear=1, 
					dl_compact, 
				// css attributes
					dl_class,
					dl_id,
					dl_style,
				// accessibility attributes
					dl_title,
				// language attributes
					dl_dir,
					dl_lang,
					dl_language,
				// events attributes
					dl_onclick,
					dl_ondblclick,
					dl_ondragstart,
					dl_onhelp,
					dl_onkeydown,
					dl_onkeypress,
					dl_onkeyup,
					dl_onmousedown,
					dl_onmousemove,
					dl_onmouseout,
					dl_onmouseover,
					dl_onmouseup,
					dl_onselectstart
			} dl_arg;


			typedef	enum {
				// standard attributes
					dt_clear=1, 
				// css attributes
					dt_class,
					dt_id,
					dt_style,
				// accessibility attributes
					dt_title,
				// language attributes
					dt_dir,
					dt_lang,
					dt_language,
				// events attributes
					dt_onclick,
					dt_ondblclick,
					dt_ondragstart,
					dt_onhelp,
					dt_onkeydown,
					dt_onkeypress,
					dt_onkeyup,
					dt_onmousedown,
					dt_onmousemove,
					dt_onmouseout,
					dt_onmouseover,
					dt_onmouseup,
					dt_onselectstart
			} dt_arg;


			typedef	enum {
				// standard attributes
					dd_clear=1, 
				// css attributes
					dd_class,
					dd_id,
					dd_style,
				// accessibility attributes
					dd_title,
				// language attributes
					dd_dir,
					dd_lang,
					dd_language,
				// events attributes
					dd_onclick,
					dd_ondblclick,
					dd_ondragstart,
					dd_onhelp,
					dd_onkeydown,
					dd_onkeypress,
					dd_onkeyup,
					dd_onmousedown,
					dd_onmousemove,
					dd_onmouseout,
					dd_onmouseover,
					dd_onmouseup,
					dd_onselectstart
			} dd_arg;



			// miscellaneous tags
			typedef	enum {
				// standard attributes
					basefont_color=1,
					basefont_face,
					basefont_size,
				// css attributes
					basefont_class,
					basefont_id,
					basefont_style,
				// accessibility attributes
					basefont_title,
				// language attributes
					basefont_dir,
					basefont_lang,
					basefont_language
			} basefont_arg;


			typedef	enum {
				// standard attributes
					bdo_dir=1,		// required
					bdo_language,
				// css attributes
					bdo_class,
					bdo_id,
					bdo_style,
				// accessibility attributes
					bdo_title
			} bdo_arg;


			typedef	enum {
				// standard attributes
					hr_align=1,
					hr_color,
					hr_noshade,
					hr_size,
					hr_width,
				// css attributes
					hr_class,
					hr_id,
					hr_style,
				// accessibility attributes
					hr_title,
				// event attributes
					hr_onclick,
					hr_ondblclick,
					hr_ondragstart,
					hr_onfilterchange,
					hr_onhelp,
					hr_onkeydown,
					hr_onkeypress,
					hr_onkeyup,
					hr_onmousedown,
					hr_onmousemove,
					hr_onmouseout,
					hr_onmouseover,
					hr_onmouseup,
					hr_onselectstart
			} hr_arg;


			typedef	enum {
				// standard attributes
					keygen_name=1,		// required
					keygen_challenge
			} keygen_arg;


			typedef	enum {
				// standard attributes
					spacer_type=1,		// required
					spacer_align,
					spacer_height,
					spacer_width,
					spacer_size
			} spacer_arg;


			typedef	enum {
				// standard attributes
					xml_ns=1,
					xml_prefix,
					xml_src,
				// css attributes
					xml_class,
					xml_id,
					xml_style,
				// accessibility attributes
					xml_title
			} xml_arg;


			typedef	enum {
				// standard attributes
					area_alt=1,		// required
					area_href,
					area_nohref,
					area_shape,
					area_coords,
					area_target,
					area_accesskey,
				// css attributes
					area_class,
					area_id,
					area_style,
				// accessibility attributes
					area_title,
				// language attributes
					area_dir,
					area_lang,
					area_language,
				// event attributes
					area_onblur,
					area_onclick,
					area_ondblclick,
					area_ondragstart,
					area_onfocus,
					area_onhelp,
					area_onkeydown,
					area_onkeypress,
					area_onkeyup,
					area_onmousedown,
					area_onmousemove,
					area_onmouseout,
					area_onmouseover,
					area_onmouseup,
					area_onselectstart
			} area_arg;


			typedef	enum {
				// standard attributes
					bgsound_src=1,
					bgsound_volume,
					bgsound_balance,
					bgsound_delay,
					bgsound_loop
			} bgsound_arg;


			typedef	enum {
				// standard attributes
					img_src=1,
					img_lowsrc,
					img_alt,
					img_longdesc,
					img_name,
					img_border,
					img_align,
					img_height,
					img_width,
					img_vspace,
					img_hspace,
					img_ismap,
					img_dynsrc,
					img_controls,
					img_start,
					img_loop,
					img_usemap,
					img_vrml,
				// css attributes
					img_class,
					img_id,
					img_style,
				// accessibility attributes
					img_title,
				// language attributes
					img_dir,
					img_lang,
					img_language,
				// event attributes
					img_onabort,
					img_onafterupdate,
					img_onbeforeupdate,
					img_onblur,
					img_onclick,
					img_ondblclick,
					img_ondragstart,
					img_onfocus,
					img_onhelp,
					img_onkeydown,
					img_onkeypress,
					img_onkeyup,
					img_onmousedown,
					img_onmousemove,
					img_onmouseout,
					img_onmouseover,
					img_onmouseup,
					img_onresize,
					img_onrowenter,
					img_onrowexit,
					img_onselectstart
			} img_arg;


			typedef enum {
				// standard attributes
					map_name=1,
				// css attributes
					map_class,
					map_id,
					map_style,
				// accessibility attributes
					map_title,
				// language attributes
					map_dir,
					map_lang,
					map_language,
				// event attributes
					map_onclick,
					map_ondblclick,
					map_ondragstart,
					map_onhelp,
					map_onkeydown,
					map_onkeypress,
					map_onkeyup,
					map_onmousedown,
					map_onmousemove,
					map_onmouseout,
					map_onmouseover,
					map_onmouseup,
					map_onselectstart
			} map_arg;


			typedef	enum {
				// standard attributes
					object_code=1,
					object_codebase,
					object_codetype,
					object_data,
					object_type,
					object_classid,
					object_name,
					object_standby,
					object_align,
					object_border,
					object_height,
					object_width,
					object_vspace,
					object_hspace,
					object_tabindex,
					object_accesskey,
					object_usemap,
					object_declare,
				// css attributes
					object_class,
					object_id,
					object_style,
				// accessibility attributes
					object_title,
				// language attributes
					object_dir,
					object_lang,
					object_language,
				// event attributes
					object_onafterupdate,
					object_onbeforeupdate,
					object_onblur,
					object_onclick,
					object_ondblclick,
					object_ondragstart,
					object_onfocus,
					object_onhelp,
					object_onkeydown,
					object_onkeypress,
					object_onkeyup,
					object_onmousedown,
					object_onmousemove,
					object_onmouseout,
					object_onmouseover,
					object_onmouseup,
					object_onreadystatechange,
					object_onresize,
					object_onrowenter,
					object_onrowexit,
					object_onselectstart,
				// data attributes
					object_datafld,
					object_dataformats,
					object_datasrc
			} object_arg;


			typedef	enum {
				// standard attributes
					sound_src=1,
					sound_delay,
					sound_loop
			} sound_arg;



			// positioning tags
			typedef	enum {
				// standard attributes
					ilayer_name=1,
					ilayer_src,
					ilayer_left,
					ilayer_top,
					ilayer_height,
					ilayer_width,
					ilayer_pagex,
					ilayer_pagey,
					ilayer_zindex,
					ilayer_above,
					ilayer_below,
					ilayer_background,
					ilayer_bgcolor,
					ilayer_clip,
					ilayer_visibility,
				// css attributes
					ilayer_class,
					ilayer_id,
					ilayer_style,
				// accessibility attributes
					ilayer_title
			} ilayer_arg;


			typedef	enum {
				// standard attributes
					layer_name=1,
					layer_src,
					layer_left,
					layer_top,
					layer_height,
					layer_width,
					layer_pagex,
					layer_pagey,
					layer_zindex,
					layer_above,
					layer_below,
					layer_background,
					layer_bgcolor,
					layer_clip,
					layer_visibility,
				// css attributes
					layer_class,
					layer_id,
					layer_style,
				// accessibility attributes
					layer_title
			} layer_arg;



			// revision control tags
			typedef	enum {
				// standard attributes
					del_cite=1,
					del_datetime,
				// css attributes
					del_class,
					del_id,
					del_style,
				// accessibility attributes
					del_title,
				// language attributes
					del_dir,
					del_lang,
					del_language,
				// event attributes
					del_onclick,
					del_ondblclick,
					del_ondragstart,
					del_onhelp,
					del_onkeydown,
					del_onkeypress,
					del_onkeyup,
					del_onmousedown,
					del_onmousemove,
					del_onmouseout,
					del_onmouseover,
					del_onmouseup,
					del_onselectstart
			} del_arg;


			typedef	enum {
				// standard attributes
					ins_cite=1,
					ins_datetime,
				// css attributes
					ins_class,
					ins_id,
					ins_style,
				// accessibility attributes
					ins_title,
				// language attributes
					ins_dir,
					ins_lang,
					ins_language,
				// event attributes
					ins_onclick,
					ins_ondblclick,
					ins_ondragstart,
					ins_onhelp,
					ins_onkeydown,
					ins_onkeypress,
					ins_onkeyup,
					ins_onmousedown,
					ins_onmousemove,
					ins_onmouseout,
					ins_onmouseover,
					ins_onmouseup,
					ins_onselectstart
			} ins_arg;



			// ruby tags
			typedef	enum {
				// standard attributes
					rt_name=1,
				// css attributes
					rt_class,
					rt_id,
					rt_style,
				// accessibility attributes
					rt_title,
				// language attributes
					rt_dir,
					rt_lang,
					rt_language
			} rt_arg;


			typedef	enum {
				// standard attributes
					ruby_name=1,
				// css attributes
					ruby_class,
					ruby_id,
					ruby_style,
				// accessibility attributes
					ruby_title,
				// language attributes
					ruby_dir,
					ruby_lang,
					ruby_language
			} ruby_arg;



			// style sheet tags
			typedef	enum {
				// standard attributes
					div_level=1,
					div_align,
					div_clear,
				// css attributes
					div_class,
					div_id,
					div_style,
				// accessibility attributes
					div_title,
				// language attributes
					div_dir,
					div_lang,
					div_language,
				// event attributes
					div_onafterupdate,
					div_onbeforeupdate,
					div_onblur,
					div_onclick,
					div_ondblclick,
					div_ondragstart,
					div_onfocus,
					div_onhelp,
					div_onkeydown,
					div_onkeypress,
					div_onkeyup,
					div_onmousedown,
					div_onmousemove,
					div_onmouseout,
					div_onmouseover,
					div_onmouseup,
					div_onresize,
					div_onrowenter,
					div_onrowexit,
					div_onscroll,
					div_onselectstart
			} div_arg;


			typedef	enum {
				// css attributes
					span_class=1,
					span_id,
					span_style,
				// accessibility attributes
					span_title,
				// language attributes
					span_dir,
					span_lang,
					span_language,
				// event attributes
					span_onclick,
					span_ondblclick,
					span_ondragstart,
					span_onhelp,
					span_onkeydown,
					span_onkeypress,
					span_onkeyup,
					span_onmousedown,
					span_onmousemove,
					span_onmouseout,
					span_onmouseover,
					span_onmouseup,
					span_onselectstart
			} span_arg;



			// table tags
			typedef	enum {
				// standard attributes
					caption_align=1,
					caption_valign,
				// css attributes
					caption_class,
					caption_id,
					caption_style,
				// accessibility attributes
					caption_title,
				// language attributes
					caption_dir,
					caption_lang,
					caption_language,
				// event attributes
					caption_onafterupdate,
					caption_onbeforeupdate,
					caption_onblur,
					caption_onclick,
					caption_ondblclick,
					caption_ondragstart,
					caption_onfocus,
					caption_onhelp,
					caption_onkeydown,
					caption_onkeypress,
					caption_onkeyup,
					caption_onmousedown,
					caption_onmousemove,
					caption_onmouseout,
					caption_onmouseover,
					caption_onmouseup,
					caption_onresize,
					caption_onrowenter,
					caption_onrowexit,
					caption_onselect,
					caption_onselectstart
			} caption_arg;


			typedef	enum {
				// standard attributes
					col_span=1,
					col_align,
					col_valign,
					col_width,
					col_char,
					col_charoff,
				// css attributes
					col_class,
					col_id,
					col_style,
				// accessibility attributes
					col_title,
				// language attributes
					col_dir,
					col_lang,
					col_language,
				// event attributes
					col_onclick,
					col_ondblclick,
					col_ondragstart,
					col_onkeydown,
					col_onkeypress,
					col_onkeyup,
					col_onmousedown,
					col_onmousemove,
					col_onmouseout,
					col_onmouseover,
					col_onmouseup
			} col_arg;


			typedef	enum {
				// standard attributes
					colgroup_span=1,
					colgroup_align,
					colgroup_valign,
					colgroup_width,
					colgroup_char,
					colgroup_charoff,
				// css attributes
					colgroup_class,
					colgroup_id,
					colgroup_style,
				// accessibility attributes
					colgroup_title,
				// language attributes
					colgroup_dir,
					colgroup_lang,
					colgroup_language,
				// event attributes
					colgroup_onclick,
					colgroup_ondblclick,
					colgroup_ondragstart,
					colgroup_onkeydown,
					colgroup_onkeypress,
					colgroup_onkeyup,
					colgroup_onmousedown,
					colgroup_onmousemove,
					colgroup_onmouseout,
					colgroup_onmouseover,
					colgroup_onmouseup
			} colgroup_arg;


			typedef	enum {
				// standard attributes
					thead_bgcolor=1,
					thead_align,
					thead_valign,
					thead_width,
					thead_char,
					thead_charoff,
				// css attributes
					thead_class,
					thead_id,
					thead_style,
				// accessibility attributes
					thead_title,
				// language attributes
					thead_dir,
					thead_lang,
					thead_language,
				// event attributes
					thead_onclick,
					thead_ondblclick,
					thead_ondragstart,
					thead_onhelp,
					thead_onkeydown,
					thead_onkeypress,
					thead_onkeyup,
					thead_onmousedown,
					thead_onmousemove,
					thead_onmouseout,
					thead_onmouseover,
					thead_onmouseup,
					thead_onselectstart
			} thead_arg;


			typedef	enum {
				// standard attributes
					tbody_bgcolor=1,
					tbody_align,
					tbody_valign,
					tbody_width,
					tbody_char,
					tbody_charoff,
				// css attributes
					tbody_class,
					tbody_id,
					tbody_style,
				// accessibility attributes
					tbody_title,
				// language attributes
					tbody_dir,
					tbody_lang,
					tbody_language,
				// event attributes
					tbody_onclick,
					tbody_ondblclick,
					tbody_ondragstart,
					tbody_onhelp,
					tbody_onkeydown,
					tbody_onkeypress,
					tbody_onkeyup,
					tbody_onmousedown,
					tbody_onmousemove,
					tbody_onmouseout,
					tbody_onmouseover,
					tbody_onmouseup,
					tbody_onselectstart
			} tbody_arg;


			typedef	enum {
				// standard attributes
					tfoot_bgcolor=1,
					tfoot_align,
					tfoot_valign,
					tfoot_width,
					tfoot_char,
					tfoot_charoff,
				// css attributes
					tfoot_class,
					tfoot_id,
					tfoot_style,
				// accessibility attributes
					tfoot_title,
				// language attributes
					tfoot_dir,
					tfoot_lang,
					tfoot_language,
				// event attributes
					tfoot_onclick,
					tfoot_ondblclick,
					tfoot_ondragstart,
					tfoot_onhelp,
					tfoot_onkeydown,
					tfoot_onkeypress,
					tfoot_onkeyup,
					tfoot_onmousedown,
					tfoot_onmousemove,
					tfoot_onmouseout,
					tfoot_onmouseover,
					tfoot_onmouseup,
					tfoot_onselectstart
			} tfoot_arg;


			typedef	enum {
				// standard attributes
					table_background=1,
					table_bgcolor,
					table_border,
					table_bordercolor,
					table_bordercolordark,
					table_bordercolorlight,
					table_align,
					table_cellpadding,
					table_cellspacing,
					table_height,
					table_width,
					table_cols,
					table_datapagesize,
					table_frame,
					table_rules,
					table_summary,
				// css attributes
					table_class,
					table_id,
					table_style,
				// accessibility attributes
					table_title,
				// language attributes
					table_dir,
					table_lang,
					table_language,
				// event attributes
					table_onafterupdate,
					table_onbeforeupdate,
					table_onblur,
					table_onclick,
					table_ondblclick,
					table_ondragstart,
					table_onfocus,
					table_onhelp,
					table_onkeydown,
					table_onkeypress,
					table_onkeyup,
					table_onmousedown,
					table_onmousemove,
					table_onmouseout,
					table_onmouseover,
					table_onmouseup,
					table_onresize,
					table_onrowenter,
					table_onrowexit,
					table_onscroll,
					table_onselectstart,
				// data attributes
					table_datafld,
					table_dataformats,
					table_datasrc
			} table_arg;


			typedef	enum {
				// standard attributes
					th_background=1,
					th_bgcolor,
					th_bordercolor,
					th_bordercolordark,
					th_bordercolorlight,
					th_align,
					th_valign,
					th_axis,
					th_height,
					th_width,
					th_colspan,
					th_rowspan,
					th_char,
					html_charoff,
					th_headers,
					th_nowrap,
					th_scope,
					th_abbr,
				// css attributes
					th_class,
					th_id,
					th_style,
				// accessibility attributes
					th_title,
				// language attributes
					th_dir,
					th_lang,
					th_language,
				// event attributes
					th_onafterupdate,
					th_onbeforeupdate,
					th_onblur,
					th_onclick,
					th_ondblclick,
					th_ondragstart,
					th_onfocus,
					th_onhelp,
					th_onkeydown,
					th_keypress,
					th_onkeyup,
					th_onmousedown,
					th_onmousemove,
					th_onmouseout,
					th_onmouseover,
					th_onmouseup,
					th_onresize,
					th_onrowenter,
					th_onrowexit,
					th_onscroll,
					th_onselectstart
			} th_arg;


			typedef	enum {
				// standard attribute
					td_background=1,
					td_bgcolor,
					td_bordercolor,
					td_bordercolordark,
					td_bordercolorlight,
					td_align,
					td_valign,
					td_axis,
					td_height,
					td_width,
					td_colspan,
					td_rowspan,
					td_char,
					td_charoff,
					td_headers,
					td_nowrap,
					td_scope,
					td_abbr,
				// css attributes
					td_class,
					td_id,
					td_style,
				// accessibility attributes
					td_title,
				// language attributes
					td_dir,
					td_lang,
					td_language,
				// event attributes
					td_onafterupdate,
					td_onbeforeupdate,
					td_onblur,
					td_onclick,
					td_ondblclick,
					td_ondragstart,
					td_onfocus,
					td_onhelp,
					td_onkeydown,
					td_onkeypress,
					td_onkeyup,
					td_onmousedown,
					td_onmousemove,
					td_onmouseout,
					td_onmouseover,
					td_onmouseup,
					td_onresize,
					td_onrowenter,
					td_onrowexit,
					td_onscroll,
					td_onselectstart
			} td_arg;


			typedef	enum {
				// standard attributes
					tr_bgcolor=1,
					tr_bordercolor,
					tr_bordercolordark,
					tr_bordercolorlight,
					tr_align,
					tr_valign,
					tr_char,
					tr_charoff,
					tr_nowrap,
				// css attributes
					tr_class,
					tr_id,
					tr_style,
				// accessibility attributes
					tr_title,
				// language attributes
					tr_dir,
					tr_lang,
					tr_language,
				// event attributes
					tr_onafterupdate,
					tr_onbeforeupdate,
					tr_onblur,
					tr_onclick,
					tr_ondblclick,
					tr_ondragstart,
					tr_onfocus,
					tr_onhelp,
					tr_onkeydown,
					tr_onkeypress,
					tr_onkeyup,
					tr_onmousedown,
					tr_onmousemove,
					tr_onmouseout,
					tr_onmouseover,
					tr_onmouseup,
					tr_onresize,
					tr_onrowenter,
					tr_onrowexit,
					tr_onscroll,
					tr_onselectstart
			} tr_arg;


		// the following functions output corresponding html tags

		// top level tags
		void	doctypeTag(strstream *container,
				// standard attributes
				char *doctype_topelement,
				char *doctype_availability,
				char *doctype_registration,
				char *doctype_organization,
				char *doctype_type,
				char *doctype_label,
				char *doctype_language
				);

		void	htmlTag(strstream *container,
				// standard attributes
				char *html_registration,
				char *html_organization,
				char *html_type,
				char *html_label,
				char *html_languagestring,
				// css attributes
				char *html_class,
				char *html_id,
				char *html_style,
				// accessibility attributes
				char *html_title,
				// language attributes
				char *html_dir,
				char *html_lang,
				char *html_language
				);
		void	endHtmlTag(strstream *container); 



		// frame tags
		void	framesetTag(strstream *container, ...);
		void	endFramesetTag(strstream *container); 


		void	frameTag(strstream *container, ...);
		void	endFrameTag(strstream *container); 


		void	noframesTag(strstream *container, ...);
		void	endNoframesTag(strstream *container); 



		// head tags
		void	headTag(strstream *container, ...);
		void	endHeadTag(strstream *container); 


		void	baseTag(strstream *container, ...);


		void	isindexTag(strstream *container, ...);


		void	linkTag(strstream *container, ...);


		void	metaTag(strstream *container, ...);


		void	nextidTag(strstream *container, char *n); 


		void	scriptTag(strstream *container, ...);
		void	endScriptTag(strstream *container);


		void	noscriptTag(strstream *container);
		void	endNoscriptTag(strstream *container); 


		void	styleTag(strstream *container, ...);

		void	titleTag(strstream *container, ...);
		void	endTitleTag(strstream *container); 



		// body tags
		void	bodyTag(strstream *container, ...);
		void	endBodyTag(strstream *container); 



		// anchor tags
		void	aTag(strstream *container, ...);
		void	endATag(strstream *container); 



		// block formatting tags
		void	addressTag(strstream *container, ...);
		void	endAddressTag(strstream *container); 


		void	blockquoteTag(strstream *container, ...);
		void	endBlockquoteTag(strstream *container);


		void	centerTag(strstream *container, ...);
		void	endCenterTag(strstream *container);


		void	h1Tag(strstream *container, ...);
		void	endH1Tag(strstream *container); 


		void	h2Tag(strstream *container, ...);
		void	endH2Tag(strstream *container); 


		void	h3Tag(strstream *container, ...);
		void	endH3Tag(strstream *container); 


		void	h4Tag(strstream *container, ...);
		void	endH4Tag(strstream *container); 


		void	h5Tag(strstream *container, ...);
		void	endH5Tag(strstream *container); 


		void	h6Tag(strstream *container, ...);
		void	endH6Tag(strstream *container); 


		void	marqueeTag(strstream *container, ...);
		void	endMarqueeTag(strstream *container); 


		void	multicolTag(strstream *container, ...);
		void	endMulticolTag(strstream *container); 


		void	pTag(strstream *container, ...);
		void	endPTag(strstream *container); 


		void	preTag(strstream *container, ...);
		void	endPreTag(strstream *container); 



		// embedded functionality tags
		void	embedTag(strstream *container, ...);


		void	noembedTag(strstream *container);
		void	endNoembedTag(strstream *container); 


		void	appletTag(strstream *container, ...);
		void	endAppletTag(strstream *container); 


		void	paramTag(strstream *container, ...);



		// character formatting tags
		void	abbrTag(strstream *container, ...);
		void	endAbbrTag(strstream *container); 


		void	acronymTag(strstream *container, ...);
		void	endAcronymTag(strstream *container); 


		void	bTag(strstream *container, ...);
		void	endBTag(strstream *container); 


		void	bigTag(strstream *container, ...);
		void	endBigTag(strstream *container); 


		void	blinkTag(strstream *container, ...);
		void	endBlinkTag(strstream *container); 


		void	citeTag(strstream *container, ...);
		void	endCiteTag(strstream *container); 


		void	codeTag(strstream *container, ...);
		void	endCodeTag(strstream *container); 


		void	dfnTag(strstream *container, ...);
		void	endDfnTag(strstream *container); 


		void	emTag(strstream *container, ...);
		void	endEmTag(strstream *container); 


		void	fontTag(strstream *container, ...);
		void	endFontTag(strstream *container); 


		void	iTag(strstream *container, ...);
		void	endITag(strstream *container); 


		void	kbdTag(strstream *container, ...);
		void	endKbdTag(strstream *container); 


		void	qTag(strstream *container, ...);
		void	endQTag(strstream *container); 

		void	sampTag(strstream *container, ...);
		void	endSampTag(strstream *container); 


		void	smallTag(strstream *container, ...);
		void	endSmallTag(strstream *container); 


		void	strikeTag(strstream *container, ...);
		void	endStrikeTag(strstream *container); 


		void	strongTag(strstream *container, ...);
		void	endStrongTag(strstream *container); 


		void	subTag(strstream *container, ...);
		void	endSubTag(strstream *container); 


		void	supTag(strstream *container, ...);
		void	endSupTag(strstream *container); 


		void	ttTag(strstream *container, ...);
		void	endTtTag(strstream *container); 


		void	uTag(strstream *container, ...);
		void	endUTag(strstream *container); 


		void	iframeTag(strstream *container, ...);
		void	endIframeTag(strstream *container); 


		void	varTag(strstream *container, ...);
		void	endVarTag(strstream *container); 



		// form tags
		void	buttonTag(strstream *container, ...);
		void	endButtonTag(strstream *container); 


		void	fieldsetTag(strstream *container, ...);
		void	endFieldsetTag(strstream *container); 


		void	htmlareaTag(strstream *container, ...);
		void	endHtmlareaTag(strstream *container); 


		void	formTag(strstream *container, ...);
		void	endFormTag(strstream *container); 


		void	labelTag(strstream *container, ...);
		void	endLabelTag(strstream *container); 


		void	legendTag(strstream *container, ...);
		void	endLegendTag(strstream *container); 


		void	optgroupTag(strstream *container, ...);
		void	endOptgroupTag(strstream *container); 


		void	optionTag(strstream *container, ...);
		void	endOptionTag(strstream *container); 


		void	selectTag(strstream *container, ...);
		void	endSelectTag(strstream *container); 


		void	inputTag(strstream *container, ...);



		// line breaking tags
		void	brTag(strstream *container, ...);


		void	nobrTag(strstream *container, ...);
		void	endNobrTag(strstream *container); 


		void	wbrTag(strstream *container);



		// list tags
		void	olTag(strstream *container, ...);
		void	endOlTag(strstream *container); 


		void	ulTag(strstream *container, ...);
		void	endUlTag(strstream *container); 


		void	menuTag(strstream *container, ...);
		void	endMenuTag(strstream *container); 


		void	dirTag(strstream *container, ...);
		void	endDirTag(strstream *container); 


		void	liTag(strstream *container, ...);
		void	endLiTag(strstream *container); 


		void	dlTag(strstream *container, ...);
		void	endDlTag(strstream *container); 


		void	dtTag(strstream *container, ...);
		void	endDtTag(strstream *container); 


		void	ddTag(strstream *container, ...);
		void	endDdTag(strstream *container); 



		// miscellaneous tags
		void	basefontTag(strstream *container, ...);
		void	endBasefontTag(strstream *container); 


		void	bdoTag(strstream *container, ...);
		void	endBdoTag(strstream *container); 


		void	commentTag(strstream *container); 
		void	endCommentTag(strstream *container); 


		void	hrTag(strstream *container, ...);


		void	keygenTag(strstream *container, ...);


		void	spacerTag(strstream *container, ...);


		void	xmlTag(strstream *container, ...);
		void	endXmlTag(strstream *container); 


		void	areaTag(strstream *container, ...);


		void	bgsoundTag(strstream *container, ...);


		void	imgTag(strstream *container, ...);


		void	mapTag(strstream *container, ...);
		void	endMapTag(strstream *container); 


		void	objectTag(strstream *container, ...);
		void	endObjectTag(strstream *container); 


		void	soundTag(strstream *container, ...);



		// positioning tags
		void	ilayerTag(strstream *container, ...);
		void	endIlayerTag(strstream *container); 


		void	layerTag(strstream *container, ...);
		void	endLayerTag(strstream *container); 


		void	nolayerTag(strstream *container);
		void	endNolayerTag(strstream *container); 



		// revision control tags
		void	delTag(strstream *container, ...);
		void	endDelTag(strstream *container); 


		void	insTag(strstream *container, ...);
		void	endInsTag(strstream *container); 



		// ruby tags
		void	rbTag(strstream *container);
		void	endRbTag(strstream *container); 


		void	rtTag(strstream *container, ...);
		void	endRtTag(strstream *container); 


		void	rubyTag(strstream *container, ...);
		void	endRubyTag(strstream *container); 



		// style sheet tags
		void	divTag(strstream *container, ...);
		void	endDivTag(strstream *container); 


		void	spanTag(strstream *container, ...);
		void	endSpanTag(strstream *container); 



		// table tags
		void	captionTag(strstream *container, ...);
		void	endCaptionTag(strstream *container); 


		void	colTag(strstream *container, ...);
		void	endColTag(strstream *container); 


		void	colgroupTag(strstream *container, ...);
		void	endColgroupTag(strstream *container); 


		void	theadTag(strstream *container, ...);
		void	endTheadTag(strstream *container); 


		void	tbodyTag(strstream *container, ...);
		void	endTbodyTag(strstream *container); 


		void	tfootTag(strstream *container, ...);
		void	endTfootTag(strstream *container); 


		void	tableTag(strstream *container, ...);
		void	endTableTag(strstream *container); 


		void	thTag(strstream *container, ...);
		void	endThTag(strstream *container); 


		void	tdTag(strstream *container, ...);
		void	endTdTag(strstream *container); 


		void	trTag(strstream *container, ...);
		void	endTrTag(strstream *container);

	private:
		#include <private/htmltags.h>

};


#endif