1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3  * anjuta-token.h
4  * Copyright (C) Sébastien Granjoux 2009 <seb.sfo@free.fr>
5  *
6  * This program is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the
8  * Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  * See the GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef _ANJUTA_TOKEN_H_
21 #define _ANJUTA_TOKEN_H_
22 
23 #include <gio/gio.h>
24 #include <glib.h>
25 
26 G_BEGIN_DECLS
27 
28 typedef enum
29 {
30 	ANJUTA_TOKEN_NONE 							= 0,
31 	ANJUTA_TOKEN_EOL								= '\n',
32 	ANJUTA_TOKEN_COMMA								= 0x2C,		/* glib-genmarshal doesn't like ',' */
33 
34 	ANJUTA_TOKEN_TYPE 							= 0xFFFF,
35 
36 	ANJUTA_TOKEN_FIRST								= 16384,
37 	ANJUTA_TOKEN_FILE,
38 	ANJUTA_TOKEN_MACRO,
39 	ANJUTA_TOKEN_CONTENT,
40 	ANJUTA_TOKEN_ARGUMENT,
41 	ANJUTA_TOKEN_VALUE,
42 	ANJUTA_TOKEN_EOV,	/* 16390 */
43 	ANJUTA_TOKEN_PARSED,
44 	ANJUTA_TOKEN_KEYWORD,
45 	ANJUTA_TOKEN_OPERATOR,
46 	ANJUTA_TOKEN_NAME,
47 	ANJUTA_TOKEN_VARIABLE,
48 	ANJUTA_TOKEN_DEFINITION,
49 	ANJUTA_TOKEN_STATEMENT,
50 	ANJUTA_TOKEN_NUMBER,
51 	ANJUTA_TOKEN_JUNK,
52 	ANJUTA_TOKEN_COMMENT,	/* 16400 */
53 	ANJUTA_TOKEN_OPEN_QUOTE,
54 	ANJUTA_TOKEN_CLOSE_QUOTE,
55 	ANJUTA_TOKEN_ESCAPE,
56 	ANJUTA_TOKEN_FUNCTION,
57 	ANJUTA_TOKEN_SPACE,
58 	ANJUTA_TOKEN_START,
59 	ANJUTA_TOKEN_NEXT,
60 	ANJUTA_TOKEN_LAST,
61 	ANJUTA_TOKEN_ITEM,
62 	ANJUTA_TOKEN_STRING,	/* 16410 */
63 	ANJUTA_TOKEN_ERROR,
64 	ANJUTA_TOKEN_WORD,
65 	ANJUTA_TOKEN_LIST,
66 	ANJUTA_TOKEN_ANY,
67 	ANJUTA_TOKEN_USER,
68 
69 	ANJUTA_TOKEN_FLAGS 							= 0xFFFF << 16,
70 
71 	ANJUTA_TOKEN_PUBLIC_FLAGS 				= 0x00FF << 16,
72 
73 	ANJUTA_TOKEN_IRRELEVANT 					= 1 << 16,
74 	ANJUTA_TOKEN_OPEN 							= 1 << 17,
75 	ANJUTA_TOKEN_CLOSE 							= 1 << 18,
76 	ANJUTA_TOKEN_SIGNIFICANT					= 1 << 20,
77 
78 	ANJUTA_TOKEN_PRIVATE_FLAGS 			= 0x00FF << 24,
79 
80 	ANJUTA_TOKEN_CASE_INSENSITIVE 		= 1 << 24,
81 	ANJUTA_TOKEN_STATIC 							= 1 << 25,
82 	ANJUTA_TOKEN_REMOVED						= 1 << 26,
83 	ANJUTA_TOKEN_ADDED							= 1 << 27
84 
85 } AnjutaTokenType;
86 
87 typedef struct _AnjutaToken AnjutaToken;
88 
89 typedef void (*AnjutaTokenForeachFunc) (AnjutaToken *token, gpointer data);
90 
91 
92 AnjutaToken *anjuta_token_new_string (AnjutaTokenType type, const gchar *value);
93 AnjutaToken *anjuta_token_new_string_len (AnjutaTokenType type, gchar *value, gsize length);
94 AnjutaToken *anjuta_token_new_static (AnjutaTokenType type, const gchar *value);
95 AnjutaToken *anjuta_token_new_static_len (gint type, const gchar *pos, gsize length);
96 
97 AnjutaToken* anjuta_token_free_children (AnjutaToken *token);
98 AnjutaToken* anjuta_token_free (AnjutaToken *token);
99 
100 void anjuta_token_set_type (AnjutaToken *token, gint type);
101 gint anjuta_token_get_type (AnjutaToken *token);
102 void anjuta_token_set_flags (AnjutaToken *token, gint flags);
103 void anjuta_token_clear_flags (AnjutaToken *token, gint flags);
104 gint anjuta_token_get_flags (AnjutaToken *token);
105 void anjuta_token_set_string (AnjutaToken *token, const char *value, gsize length);
106 const gchar *anjuta_token_get_string (AnjutaToken *token);
107 void anjuta_token_set_length (AnjutaToken *token, gsize length);
108 gsize anjuta_token_get_length (AnjutaToken *token);
109 
110 AnjutaToken *anjuta_token_next (AnjutaToken *token);
111 AnjutaToken *anjuta_token_previous (AnjutaToken *token);
112 AnjutaToken *anjuta_token_last (AnjutaToken *token);
113 AnjutaToken *anjuta_token_parent (AnjutaToken *token);
114 AnjutaToken *anjuta_token_list (AnjutaToken *token);
115 AnjutaToken *anjuta_token_next_after_children (AnjutaToken *token);
116 void anjuta_token_foreach_content (AnjutaToken *token, AnjutaTokenForeachFunc func, gpointer user_data);
117 void anjuta_token_foreach_token (AnjutaToken *token, AnjutaTokenForeachFunc func, gpointer user_data);
118 AnjutaToken *anjuta_token_foreach_post_order (AnjutaToken *token, AnjutaTokenForeachFunc func, gpointer user_data);
119 
120 AnjutaToken *anjuta_token_first_item (AnjutaToken *list);
121 AnjutaToken *anjuta_token_next_item (AnjutaToken *item);
122 AnjutaToken *anjuta_token_previous_item (AnjutaToken *item);
123 AnjutaToken *anjuta_token_last_item (AnjutaToken *list);
124 
125 AnjutaToken *anjuta_token_append_child (AnjutaToken *parent, AnjutaToken *children);
126 AnjutaToken *anjuta_token_prepend_child (AnjutaToken *parent, AnjutaToken *children);
127 AnjutaToken *anjuta_token_prepend_items (AnjutaToken *list, AnjutaToken *item);
128 AnjutaToken *anjuta_token_insert_after (AnjutaToken *sibling, AnjutaToken *list);
129 AnjutaToken *anjuta_token_insert_before (AnjutaToken *sibling, AnjutaToken *list);
130 AnjutaToken *anjuta_token_delete_parent (AnjutaToken *parent);
131 void anjuta_token_remove_item (AnjutaToken *item);
132 
133 AnjutaToken *anjuta_token_merge (AnjutaToken *first, AnjutaToken *end);
134 AnjutaToken *anjuta_token_merge_own_children (AnjutaToken *first);
135 AnjutaToken *anjuta_token_merge_children (AnjutaToken *first, AnjutaToken *end);
136 AnjutaToken *anjuta_token_merge_previous (AnjutaToken *list, AnjutaToken *first);
137 AnjutaToken *anjuta_token_split (AnjutaToken *token, guint size);
138 AnjutaToken *anjuta_token_cut (AnjutaToken *token, guint pos, guint size);
139 AnjutaToken *anjuta_token_concat(AnjutaToken *token);
140 
141 gchar *anjuta_token_evaluate (AnjutaToken *token);
142 gchar *anjuta_token_evaluate_name (AnjutaToken *token);
143 gboolean anjuta_token_is_empty (AnjutaToken *token);
144 
145 void anjuta_token_dump (AnjutaToken *token);
146 gboolean anjuta_token_check (AnjutaToken *token);
147 void anjuta_token_dump_link (AnjutaToken *token);
148 
149 gboolean anjuta_token_compare (AnjutaToken *tokena, AnjutaToken *tokenb);
150 
151 G_END_DECLS
152 
153 #endif
154