diff options
author | Emmanuele Bassi <ebassi@openedhand.com> | 2007-10-05 16:39:10 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@openedhand.com> | 2007-10-05 16:39:10 +0100 |
commit | 220838e4e61c5a8fd9cf627da7309acf44fa82f0 (patch) | |
tree | 0aa652348d687710a3a25b516457aa72d95749ef /json-glib/json-parser.c | |
parent | ea5ee264a5b82fd1d09fa84ec81e17c4ea0d0c4a (diff) | |
download | json-glib-220838e4e61c5a8fd9cf627da7309acf44fa82f0.tar.gz |
Add line/position getters to JsonParser
Add two methods to JsonParser to retrieve the currently parsed line
and position within that line. These methods works only while parsing,
so within the signal handlers and inside subclasses.
Diffstat (limited to 'json-glib/json-parser.c')
-rw-r--r-- | json-glib/json-parser.c | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/json-glib/json-parser.c b/json-glib/json-parser.c index 659d846..fa57995 100644 --- a/json-glib/json-parser.c +++ b/json-glib/json-parser.c @@ -45,6 +45,8 @@ struct _JsonParserPrivate { JsonNode *root; JsonNode *current_node; + + GScanner *scanner; }; static const GScannerConfig json_scanner_config = @@ -728,8 +730,6 @@ json_scanner_msg_handler (GScanner *scanner, { GError *error = NULL; - g_warning ("Line %d: %s", scanner->line, message); - g_set_error (&error, JSON_PARSER_ERROR, JSON_PARSER_ERROR_PARSE, "Parse error on line %d: %s", @@ -862,6 +862,8 @@ json_parser_load_from_data (JsonParser *parser, GINT_TO_POINTER (symbols[i].token)); } + parser->priv->scanner = scanner; + g_signal_emit (parser, parser_signals[PARSE_START], 0); done = FALSE; @@ -931,7 +933,7 @@ json_parser_load_from_data (JsonParser *parser, } g_scanner_destroy (scanner); - + parser->priv->scanner = NULL; parser->priv->current_node = NULL; g_signal_emit (parser, parser_signals[PARSE_END], 0); @@ -956,3 +958,41 @@ json_parser_get_root (JsonParser *parser) return parser->priv->root; } +/** + * json_parser_get_current_line: + * @parser: a #JsonParser + * + * Retrieves the line currently parsed, starting from 1. + * + * Return value: the currently parsed line. + */ +guint +json_parser_get_current_line (JsonParser *parser) +{ + g_return_val_if_fail (JSON_IS_PARSER (parser), 0); + + if (parser->priv->scanner) + return g_scanner_cur_line (parser->priv->scanner); + + return 0; +} + +/** + * json_parser_get_current_pos: + * @parser: a #JsonParser + * + * Retrieves the current position inside the current line, starting + * from 0. + * + * Return value: the position in the current line + */ +guint +json_parser_get_current_pos (JsonParser *parser) +{ + g_return_val_if_fail (JSON_IS_PARSER (parser), 0); + + if (parser->priv->scanner) + return g_scanner_cur_line (parser->priv->scanner); + + return 0; +} |