Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
1 /* GLIB - Library of useful routines for C programming
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3 * Portions copyright (c) 2006 Nokia Corporation. All rights reserved.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the
17 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 * Boston, MA 02111-1307, USA.
22 * Modified by the GLib Team and others 1997-2000. See the AUTHORS
23 * file for a list of people on the GLib Team. See the ChangeLog
24 * files for a list of changes. These files are distributed with
25 * GLib at ftp://ftp.gtk.org/pub/gtk/.
28 #ifndef __G_SCANNER_H__
29 #define __G_SCANNER_H__
32 #include <glib/gdataset.h>
33 #include <glib/ghash.h>
37 typedef struct _GScanner GScanner;
38 typedef struct _GScannerConfig GScannerConfig;
39 typedef union _GTokenValue GTokenValue;
41 typedef void (*GScannerMsgFunc) (GScanner *scanner,
45 /* GScanner: Flexible lexical scanner for general purpose.
49 #define G_CSET_A_2_Z "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
50 #define G_CSET_a_2_z "abcdefghijklmnopqrstuvwxyz"
51 #define G_CSET_DIGITS "0123456789"
52 #define G_CSET_LATINC "\300\301\302\303\304\305\306"\
53 "\307\310\311\312\313\314\315\316\317\320"\
54 "\321\322\323\324\325\326"\
55 "\330\331\332\333\334\335\336"
56 #define G_CSET_LATINS "\337\340\341\342\343\344\345\346"\
57 "\347\350\351\352\353\354\355\356\357\360"\
58 "\361\362\363\364\365\366"\
59 "\370\371\372\373\374\375\376\377"
66 G_ERR_UNEXP_EOF_IN_STRING,
67 G_ERR_UNEXP_EOF_IN_COMMENT,
68 G_ERR_NON_DIGIT_IN_CONST,
79 G_TOKEN_LEFT_PAREN = '(',
80 G_TOKEN_RIGHT_PAREN = ')',
81 G_TOKEN_LEFT_CURLY = '{',
82 G_TOKEN_RIGHT_CURLY = '}',
83 G_TOKEN_LEFT_BRACE = '[',
84 G_TOKEN_RIGHT_BRACE = ']',
85 G_TOKEN_EQUAL_SIGN = '=',
102 G_TOKEN_IDENTIFIER_NULL,
104 G_TOKEN_COMMENT_SINGLE,
105 G_TOKEN_COMMENT_MULTI,
125 struct _GScannerConfig
129 gchar *cset_skip_characters; /* default: " \t\n" */
130 gchar *cset_identifier_first;
131 gchar *cset_identifier_nth;
132 gchar *cpair_comment_single; /* default: "#\n" */
134 /* Should symbol lookup work case sensitive?
136 guint case_sensitive : 1;
138 /* Boolean values to be adjusted "on the fly"
139 * to configure scanning behaviour.
141 guint skip_comment_multi : 1; /* C like comment */
142 guint skip_comment_single : 1; /* single line comment */
143 guint scan_comment_multi : 1; /* scan multi line comments? */
144 guint scan_identifier : 1;
145 guint scan_identifier_1char : 1;
146 guint scan_identifier_NULL : 1;
147 guint scan_symbols : 1;
148 guint scan_binary : 1;
149 guint scan_octal : 1;
150 guint scan_float : 1;
151 guint scan_hex : 1; /* `0x0ff0' */
152 guint scan_hex_dollar : 1; /* `$0ff0' */
153 guint scan_string_sq : 1; /* string: 'anything' */
154 guint scan_string_dq : 1; /* string: "\\-escapes!\n" */
155 guint numbers_2_int : 1; /* bin, octal, hex => int */
156 guint int_2_float : 1; /* int => G_TOKEN_FLOAT? */
157 guint identifier_2_string : 1;
158 guint char_2_token : 1; /* return G_TOKEN_CHAR? */
159 guint symbol_2_token : 1;
160 guint scope_0_fallback : 1; /* try scope 0 on lookups? */
161 guint store_int64 : 1; /* use value.v_int64 rather than v_int */
169 guint max_parse_errors;
171 /* g_scanner_error() increments this field */
174 /* name of input stream, featured by the default message handler */
175 const gchar *input_name;
180 /* link into the scanner configuration */
181 GScannerConfig *config;
183 /* fields filled in after g_scanner_get_next_token() */
189 /* fields filled in after g_scanner_peek_next_token() */
190 GTokenType next_token;
191 GTokenValue next_value;
195 /* to be considered private */
196 GHashTable *symbol_table;
199 const gchar *text_end;
203 /* handler function for _warn and _error */
204 GScannerMsgFunc msg_handler;
207 IMPORT_C GScanner* g_scanner_new (const GScannerConfig *config_templ);
208 IMPORT_C void g_scanner_destroy (GScanner *scanner);
209 IMPORT_C void g_scanner_input_file (GScanner *scanner,
211 IMPORT_C void g_scanner_sync_file_offset (GScanner *scanner);
212 IMPORT_C void g_scanner_input_text (GScanner *scanner,
215 IMPORT_C GTokenType g_scanner_get_next_token (GScanner *scanner);
216 IMPORT_C GTokenType g_scanner_peek_next_token (GScanner *scanner);
217 IMPORT_C GTokenType g_scanner_cur_token (GScanner *scanner);
218 IMPORT_C GTokenValue g_scanner_cur_value (GScanner *scanner);
219 IMPORT_C guint g_scanner_cur_line (GScanner *scanner);
220 IMPORT_C guint g_scanner_cur_position (GScanner *scanner);
221 IMPORT_C gboolean g_scanner_eof (GScanner *scanner);
222 IMPORT_C guint g_scanner_set_scope (GScanner *scanner,
224 IMPORT_C void g_scanner_scope_add_symbol (GScanner *scanner,
228 IMPORT_C void g_scanner_scope_remove_symbol (GScanner *scanner,
230 const gchar *symbol);
231 IMPORT_C gpointer g_scanner_scope_lookup_symbol (GScanner *scanner,
233 const gchar *symbol);
234 IMPORT_C void g_scanner_scope_foreach_symbol (GScanner *scanner,
238 IMPORT_C gpointer g_scanner_lookup_symbol (GScanner *scanner,
239 const gchar *symbol);
240 IMPORT_C void g_scanner_unexp_token (GScanner *scanner,
241 GTokenType expected_token,
242 const gchar *identifier_spec,
243 const gchar *symbol_spec,
244 const gchar *symbol_name,
245 const gchar *message,
247 IMPORT_C void g_scanner_error (GScanner *scanner,
249 ...) G_GNUC_PRINTF (2,3);
250 IMPORT_C void g_scanner_warn (GScanner *scanner,
252 ...) G_GNUC_PRINTF (2,3);
254 #ifndef G_DISABLE_DEPRECATED
256 /* keep downward source compatibility */
257 #define g_scanner_add_symbol( scanner, symbol, value ) G_STMT_START { \
258 g_scanner_scope_add_symbol ((scanner), 0, (symbol), (value)); \
260 #define g_scanner_remove_symbol( scanner, symbol ) G_STMT_START { \
261 g_scanner_scope_remove_symbol ((scanner), 0, (symbol)); \
263 #define g_scanner_foreach_symbol( scanner, func, data ) G_STMT_START { \
264 g_scanner_scope_foreach_symbol ((scanner), 0, (func), (data)); \
267 /* The following two functions are deprecated and will be removed in
268 * the next major release. They do no good. */
269 #define g_scanner_freeze_symbol_table(scanner) ((void)0)
270 #define g_scanner_thaw_symbol_table(scanner) ((void)0)
272 #endif /* G_DISABLE_DEPRECATED */
276 #endif /* __G_SCANNER_H__ */