1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
4 * Copyright (C) Sébastien Granjoux 2009 <seb.sfo@free.fr>
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.
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.
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/>.
20 #ifndef _ANJUTA_TOKEN_H_
21 #define _ANJUTA_TOKEN_H_
30 ANJUTA_TOKEN_NONE
= 0,
31 ANJUTA_TOKEN_EOL
= '\n',
32 ANJUTA_TOKEN_COMMA
= 0x2C, /* glib-genmarshal doesn't like ',' */
34 ANJUTA_TOKEN_TYPE
= 0xFFFF,
36 ANJUTA_TOKEN_FIRST
= 16384,
40 ANJUTA_TOKEN_ARGUMENT
,
42 ANJUTA_TOKEN_EOV
, /* 16390 */
45 ANJUTA_TOKEN_OPERATOR
,
47 ANJUTA_TOKEN_VARIABLE
,
48 ANJUTA_TOKEN_DEFINITION
,
49 ANJUTA_TOKEN_STATEMENT
,
52 ANJUTA_TOKEN_COMMENT
, /* 16400 */
53 ANJUTA_TOKEN_OPEN_QUOTE
,
54 ANJUTA_TOKEN_CLOSE_QUOTE
,
56 ANJUTA_TOKEN_FUNCTION
,
62 ANJUTA_TOKEN_STRING
, /* 16410 */
69 ANJUTA_TOKEN_FLAGS
= 0xFFFF << 16,
71 ANJUTA_TOKEN_PUBLIC_FLAGS
= 0x00FF << 16,
73 ANJUTA_TOKEN_IRRELEVANT
= 1 << 16,
74 ANJUTA_TOKEN_OPEN
= 1 << 17,
75 ANJUTA_TOKEN_CLOSE
= 1 << 18,
76 ANJUTA_TOKEN_SIGNIFICANT
= 1 << 20,
78 ANJUTA_TOKEN_PRIVATE_FLAGS
= 0x00FF << 24,
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
87 typedef struct _AnjutaToken AnjutaToken
;
89 typedef void (*AnjutaTokenForeachFunc
) (AnjutaToken
*token
, gpointer data
);
91 AnjutaToken
*anjuta_token_new_string (AnjutaTokenType type
, const gchar
*value
);
92 AnjutaToken
*anjuta_token_new_with_string (AnjutaTokenType type
, gchar
*value
, gsize length
);
93 AnjutaToken
*anjuta_token_new_static (AnjutaTokenType type
, const gchar
*value
);
94 AnjutaToken
*anjuta_token_new_fragment (gint type
, const gchar
*pos
, gsize length
);
96 AnjutaToken
* anjuta_token_free_children (AnjutaToken
*token
);
97 AnjutaToken
* anjuta_token_free (AnjutaToken
*token
);
99 void anjuta_token_set_type (AnjutaToken
*token
, gint type
);
100 gint
anjuta_token_get_type (AnjutaToken
*token
);
101 void anjuta_token_set_flags (AnjutaToken
*token
, gint flags
);
102 void anjuta_token_clear_flags (AnjutaToken
*token
, gint flags
);
103 gint
anjuta_token_get_flags (AnjutaToken
*token
);
104 const gchar
*anjuta_token_get_string (AnjutaToken
*token
);
105 void anjuta_token_set_string (AnjutaToken
*token
, const char *value
, guint length
);
106 guint
anjuta_token_get_length (AnjutaToken
*token
);
108 AnjutaToken
*anjuta_token_next (AnjutaToken
*token
);
109 AnjutaToken
*anjuta_token_previous (AnjutaToken
*token
);
110 AnjutaToken
*anjuta_token_last (AnjutaToken
*token
);
111 AnjutaToken
*anjuta_token_parent (AnjutaToken
*token
);
112 AnjutaToken
*anjuta_token_list (AnjutaToken
*token
);
113 AnjutaToken
*anjuta_token_next_after_children (AnjutaToken
*token
);
114 void anjuta_token_foreach_content (AnjutaToken
*token
, AnjutaTokenForeachFunc func
, gpointer user_data
);
115 AnjutaToken
*anjuta_token_foreach_post_order (AnjutaToken
*token
, AnjutaTokenForeachFunc func
, gpointer user_data
);
117 AnjutaToken
*anjuta_token_first_item (AnjutaToken
*list
);
118 AnjutaToken
*anjuta_token_next_item (AnjutaToken
*item
);
119 AnjutaToken
*anjuta_token_previous_item (AnjutaToken
*item
);
120 AnjutaToken
*anjuta_token_last_item (AnjutaToken
*list
);
122 AnjutaToken
*anjuta_token_append_child (AnjutaToken
*parent
, AnjutaToken
*child
);
123 AnjutaToken
*anjuta_token_prepend_child (AnjutaToken
*parent
, AnjutaToken
*child
);
124 AnjutaToken
*anjuta_token_prepend_items (AnjutaToken
*list
, AnjutaToken
*item
);
125 AnjutaToken
*anjuta_token_insert_after (AnjutaToken
*sibling
, AnjutaToken
*token
);
126 AnjutaToken
*anjuta_token_insert_before (AnjutaToken
*sibling
, AnjutaToken
*token
);
127 AnjutaToken
*anjuta_token_delete_parent (AnjutaToken
*parent
);
129 AnjutaToken
*anjuta_token_merge (AnjutaToken
*first
, AnjutaToken
*end
);
130 AnjutaToken
*anjuta_token_merge_own_children (AnjutaToken
*first
);
131 AnjutaToken
*anjuta_token_merge_children (AnjutaToken
*first
, AnjutaToken
*end
);
132 AnjutaToken
*anjuta_token_merge_previous (AnjutaToken
*first
, AnjutaToken
*end
);
133 AnjutaToken
*anjuta_token_split (AnjutaToken
*token
, guint size
);
134 AnjutaToken
*anjuta_token_cut (AnjutaToken
*token
, guint pos
, guint size
);
136 gchar
*anjuta_token_evaluate (AnjutaToken
*token
);
137 gboolean
anjuta_token_is_empty (AnjutaToken
*token
);
139 void anjuta_token_dump (AnjutaToken
*token
);
140 gboolean
anjuta_token_check (AnjutaToken
*token
);
141 void anjuta_token_dump_link (AnjutaToken
*token
);
143 gboolean
anjuta_token_compare (AnjutaToken
*tokena
, AnjutaToken
*tokenb
);