[gnome-builder] snippets: add helper to parse a single snippet body
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] snippets: add helper to parse a single snippet body
- Date: Tue, 3 Mar 2020 04:32:58 +0000 (UTC)
commit 34f0733635c975b56c223ccf08b7bde60ea9079e
Author: Christian Hergert <chergert redhat com>
Date: Mon Mar 2 20:31:54 2020 -0800
snippets: add helper to parse a single snippet body
src/libide/sourceview/ide-snippet-parser.c | 62 ++++++++++++++++++++++++++++++
src/libide/sourceview/ide-snippet-parser.h | 4 ++
2 files changed, 66 insertions(+)
---
diff --git a/src/libide/sourceview/ide-snippet-parser.c b/src/libide/sourceview/ide-snippet-parser.c
index f094b9f1d..be91f00ab 100644
--- a/src/libide/sourceview/ide-snippet-parser.c
+++ b/src/libide/sourceview/ide-snippet-parser.c
@@ -723,3 +723,65 @@ ide_snippet_parser_init (IdeSnippetParser *parser)
parser->scope = NULL;
parser->cur_desc = NULL;
}
+
+/**
+ * ide_snippet_parser_parse_one:
+ * @data: the data to parse
+ * @data_len: the length of data, or -1 for %NULL terminated
+ * @error: a location for an error
+ *
+ * Returns: (transfer full): an #IdeSnippet
+ *
+ * Since: 3.36
+ */
+IdeSnippet *
+ide_snippet_parser_parse_one (const char *data,
+ gssize data_len,
+ GError **error)
+{
+ g_autoptr(IdeSnippetParser) parser = NULL;
+ IdeLineReader reader;
+ const gchar *line;
+ gsize line_len;
+
+ g_return_val_if_fail (data != NULL, NULL);
+
+ parser = ide_snippet_parser_new ();
+ ide_snippet_parser_feed_line (parser, "", "snippet dummy");
+
+ ide_line_reader_init (&reader, (gchar *)data, data_len);
+ while ((line = ide_line_reader_next (&reader, &line_len)))
+ {
+ g_autofree gchar *copy = NULL;
+
+ if (parser->had_error)
+ {
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "<data>:%d: invalid snippet",
+ parser->lineno);
+ return NULL;
+ }
+
+ copy = g_malloc (line_len + 2);
+ copy[0] = '\t';
+ memcpy (©[1], line, line_len);
+ copy[1+line_len] = 0;
+
+ ide_snippet_parser_feed_line (parser, "", copy);
+ }
+
+ ide_snippet_parser_finish (parser);
+
+ if (parser->snippets != NULL)
+ return g_object_ref (parser->snippets->data);
+
+ g_set_error (error,
+ G_IO_ERROR,
+ G_IO_ERROR_INVALID_DATA,
+ "<data>:%d: invalid snippet",
+ parser->lineno);
+
+ return NULL;
+}
diff --git a/src/libide/sourceview/ide-snippet-parser.h b/src/libide/sourceview/ide-snippet-parser.h
index c45662273..2151b2915 100644
--- a/src/libide/sourceview/ide-snippet-parser.h
+++ b/src/libide/sourceview/ide-snippet-parser.h
@@ -49,5 +49,9 @@ gboolean ide_snippet_parser_load_from_file (IdeSnippetParser *parser,
GError **error);
IDE_AVAILABLE_IN_3_32
GList *ide_snippet_parser_get_snippets (IdeSnippetParser *parser);
+IDE_AVAILABLE_IN_3_36
+IdeSnippet *ide_snippet_parser_parse_one (const char *data,
+ gssize data_len,
+ GError **error);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]