1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
2 /* htmltype.h
3  *
4  * Copyright (C) 1999, 2000 Helix Code, Inc.
5  *
6  * The Gnome Library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Library General Public License as
8  * published by the Free Software Foundation; either version 2 of the
9  * License, or (at your option) any later version.
10  *
11  * The Gnome Library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
14  * Library General Public License for more details.
15  *
16  * You should have received a copy of the GNU Library General Public
17  * License along with the Gnome Library; see the file COPYING.LIB.  If not,
18  * write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19  * Boston, MA 02110-1301, USA.
20  *
21  * Author: Ettore Perazzoli <ettore@comm2000.it>
22 */
23 
24 #include <config.h>
25 #include "htmltype.h"
26 
27 #include "htmlanchor.h"
28 #include "htmlbutton.h"
29 #include "htmlcheckbox.h"
30 #include "htmlclue.h"
31 #include "htmlcluealigned.h"
32 #include "htmlclueflow.h"
33 #include "htmlclueh.h"
34 #include "htmlcluev.h"
35 #include "htmlembedded.h"
36 #include "htmlframe.h"
37 #include "htmlframeset.h"
38 #include "htmlhidden.h"
39 #include "htmliframe.h"
40 #include "htmlimage.h"
41 #include "htmlimageinput.h"
42 #include "htmlmap.h"
43 #include "htmlobject.h"
44 #include "htmlradio.h"
45 #include "htmlrule.h"
46 #include "htmlselect.h"
47 #include "htmltable.h"
48 #include "htmltablecell.h"
49 #include "htmltext.h"
50 #include "htmltextarea.h"
51 #include "htmltextinput.h"
52 #include "htmltextslave.h"
53 
54 /* This is used to statically initialize all the classes we are using.  */
55 
56 static gboolean types_inited = FALSE;
57 static GHashTable *type_names = NULL;
58 
59 static void
build_type_names_table(void)60 build_type_names_table (void)
61 {
62 	HTMLType t;
63 
64 	g_assert (type_names == NULL);
65 
66 	type_names = g_hash_table_new (g_str_hash, g_str_equal);
67 
68 	for (t = HTML_TYPE_NONE + 1; t < HTML_NUM_TYPES; t++)
69 		g_hash_table_insert (type_names, (gpointer) html_type_name (t), GINT_TO_POINTER (t));
70 }
71 
72 void
html_types_init(void)73 html_types_init (void)
74 {
75 	if (types_inited)
76 		return;
77 
78 	html_anchor_type_init ();
79 	html_button_type_init ();
80 	html_checkbox_type_init ();
81 	html_clue_type_init ();
82 	html_cluealigned_type_init ();
83 	html_clueflow_type_init ();
84 	html_clueh_type_init ();
85 	html_cluev_type_init ();
86 	html_embedded_type_init ();
87 	html_hidden_type_init ();
88 	html_image_type_init ();
89 	html_imageinput_type_init ();
90 	html_object_type_init ();
91 	html_radio_type_init ();
92 	html_rule_type_init ();
93 	html_select_type_init ();
94 	html_table_cell_type_init ();
95 	html_table_type_init ();
96 	html_textarea_type_init ();
97 	html_text_input_type_init ();
98 	html_text_slave_type_init ();
99 	html_text_type_init ();
100 
101 	html_frameset_type_init ();
102 	html_frame_type_init ();
103 	html_iframe_type_init ();
104 
105 	build_type_names_table ();
106 
107 	types_inited = TRUE;
108 }
109 
110 
111 const gchar *
html_type_name(HTMLType type)112 html_type_name (HTMLType type)
113 {
114 	g_return_val_if_fail (type != HTML_TYPE_NONE, NULL);
115 	g_return_val_if_fail (type < HTML_NUM_TYPES, NULL);
116 
117 	switch (type) {
118 	case HTML_TYPE_ANCHOR:
119 		return "Anchor";
120 	case HTML_TYPE_BULLET:
121 		return "Bullet";
122 	case HTML_TYPE_BUTTON:
123 		return "Button";
124 	case HTML_TYPE_CHECKBOX:
125 		return "CheckBox";
126 	case HTML_TYPE_CLUE:
127 		return "Clue";
128 	case HTML_TYPE_CLUEALIGNED:
129 		return "ClueAligned";
130 	case HTML_TYPE_CLUEFLOW:
131 		return "ClueFlow";
132 	case HTML_TYPE_CLUEH:
133 		return "ClueH";
134 	case HTML_TYPE_CLUEV:
135 		return "ClueV";
136 	case HTML_TYPE_EMBEDDED:
137 		return "Embedded";
138 	case HTML_TYPE_HIDDEN:
139 		return "Hidden";
140 	case HTML_TYPE_HSPACE:
141 		return "HSpace";
142 	case HTML_TYPE_IMAGE:
143 		return "Image";
144 	case HTML_TYPE_IMAGEINPUT:
145 		return "ImageInput";
146 	case HTML_TYPE_LINKTEXT:
147 		return "LinkText";
148 	case HTML_TYPE_OBJECT:
149 		return "Object";
150 	case HTML_TYPE_RADIO:
151 		return "Radio";
152 	case HTML_TYPE_RULE:
153 		return "Rule";
154 	case HTML_TYPE_SELECT:
155 		return "Select";
156 	case HTML_TYPE_TABLE:
157 		return "Table";
158 	case HTML_TYPE_TABLECELL:
159 		return "TableCell";
160 	case HTML_TYPE_TEXT:
161 		return "Text";
162 	case HTML_TYPE_TEXTAREA:
163 		return "TextArea";
164 	case HTML_TYPE_TEXTINPUT:
165 		return "TextInput";
166 	case HTML_TYPE_TEXTSLAVE:
167 		return "TextSlave";
168 	case HTML_TYPE_IFRAME:
169 		return "IFrame";
170 	case HTML_TYPE_FRAME:
171 		return "Frame";
172 	case HTML_TYPE_FRAMESET:
173 		return "Framset";
174 	case HTML_TYPE_NONE:
175 	case HTML_NUM_TYPES:
176 		/* Make compiler happy.  */
177 		g_assert_not_reached ();
178 	}
179 
180 	g_assert_not_reached ();
181 	return NULL;
182 }
183 
184 HTMLType
html_type_from_name(const gchar * name)185 html_type_from_name (const gchar *name)
186 {
187 	g_assert (type_names);
188 
189 	return GPOINTER_TO_INT (g_hash_table_lookup (type_names, name));
190 }
191