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