[gnome-builder/wip/chergert/snippets-viewer] snippets: store snippet text with snippet
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/chergert/snippets-viewer] snippets: store snippet text with snippet
- Date: Sat, 22 Aug 2015 20:21:55 +0000 (UTC)
commit f0e774afb28b7e8ba59e86454a0a220088e4d183
Author: Christian Hergert <christian hergert me>
Date: Sat Aug 22 13:18:48 2015 -0700
snippets: store snippet text with snippet
This can be handy to have so that we can visualize the actual snippet text
to the user in various places (snippet editor for example).
This is definitely complicated by the single snippet reuse in multiple
languages. But I think if we continue down this path and track where,
in which file, the snippet originated, we can point users to the correct
location to edit them.
libide/ide-source-snippet-parser.c | 31 ++++++++++++++-------
libide/ide-source-snippet.c | 46 ++++++++++++++++++++++++++++---
libide/ide-source-snippet.h | 53 +++++++++++++++++++-----------------
3 files changed, 91 insertions(+), 39 deletions(-)
---
diff --git a/libide/ide-source-snippet-parser.c b/libide/ide-source-snippet-parser.c
index 74e146f..76929ee 100644
--- a/libide/ide-source-snippet-parser.c
+++ b/libide/ide-source-snippet-parser.c
@@ -37,12 +37,11 @@ struct _IdeSourceSnippetParser
gchar *cur_name;
gchar *cur_desc;
GString *cur_text;
+ GString *snippet_text;
};
-
G_DEFINE_TYPE (IdeSourceSnippetParser, ide_source_snippet_parser, G_TYPE_OBJECT)
-
IdeSourceSnippetParser *
ide_source_snippet_parser_new (void)
{
@@ -74,17 +73,18 @@ ide_source_snippet_parser_store (IdeSourceSnippetParser *parser)
for (scope_iter = parser->scope; scope_iter; scope_iter = scope_iter->next)
{
snippet = ide_source_snippet_new (parser->cur_name, g_strdup(scope_iter->data));
- ide_source_snippet_set_description(snippet, parser->cur_desc);
+ ide_source_snippet_set_description (snippet, parser->cur_desc);
+ ide_source_snippet_set_snippet_text (snippet, parser->snippet_text->str);
for (chunck_iter = parser->chunks; chunck_iter; chunck_iter = chunck_iter->next)
{
- #if 0
+#if 0
g_printerr ("%s: Tab: %02d Link: %02d Text: %s\n",
parser->cur_name,
ide_source_snippet_chunk_get_tab_stop (chunck_iter->data),
ide_source_snippet_chunk_get_linked_chunk (chunck_iter->data),
ide_source_snippet_chunk_get_text (chunck_iter->data));
- #endif
+#endif
ide_source_snippet_add_chunk (snippet, chunck_iter->data);
}
@@ -96,22 +96,21 @@ static void
ide_source_snippet_parser_finish (IdeSourceSnippetParser *parser)
{
if (parser->cur_name)
- {
- ide_source_snippet_parser_store(parser);
- }
+ ide_source_snippet_parser_store(parser);
g_clear_pointer (&parser->cur_name, g_free);
g_string_truncate (parser->cur_text, 0);
+ g_string_truncate (parser->snippet_text, 0);
g_list_foreach (parser->chunks, (GFunc) g_object_unref, NULL);
g_list_free (parser->chunks);
parser->chunks = NULL;
- g_list_free_full(parser->scope, g_free);
+ g_list_free_full (parser->scope, g_free);
parser->scope = NULL;
- g_free(parser->cur_desc);
+ g_free (parser->cur_desc);
parser->cur_desc = NULL;
}
@@ -413,6 +412,8 @@ ide_source_snippet_parser_feed_line (IdeSourceSnippetParser *parser,
gchar *basename,
const gchar *line)
{
+ const gchar *orig = line;
+
g_assert (parser);
g_assert (basename);
g_assert (line);
@@ -461,6 +462,7 @@ ide_source_snippet_parser_feed_line (IdeSourceSnippetParser *parser,
break;
}
+ /* Fall through */
case '-':
if (parser->cur_text->len || parser->chunks)
{
@@ -493,6 +495,9 @@ ide_source_snippet_parser_feed_line (IdeSourceSnippetParser *parser,
g_warning (_("Invalid snippet at line %d: %s"), parser->lineno, line);
break;
}
+
+ g_string_append (parser->snippet_text, orig);
+ g_string_append_c (parser->snippet_text, '\n');
}
gboolean
@@ -569,6 +574,11 @@ ide_source_snippet_parser_finalize (GObject *object)
if (self->cur_text)
g_string_free (self->cur_text, TRUE);
+ self->cur_text = NULL;
+
+ if (self->snippet_text)
+ g_string_free (self->snippet_text, TRUE);
+ self->snippet_text = NULL;
g_free (self->cur_name);
self->cur_name = NULL;
@@ -596,6 +606,7 @@ ide_source_snippet_parser_init (IdeSourceSnippetParser *parser)
{
parser->lineno = -1;
parser->cur_text = g_string_new (NULL);
+ parser->snippet_text = g_string_new (NULL);
parser->scope = NULL;
parser->cur_desc = NULL;
}
diff --git a/libide/ide-source-snippet.c b/libide/ide-source-snippet.c
index 90f04a1..e61e3f7 100644
--- a/libide/ide-source-snippet.c
+++ b/libide/ide-source-snippet.c
@@ -38,6 +38,7 @@ struct _IdeSourceSnippet
gchar *trigger;
gchar *language;
gchar *description;
+ gchar *snippet_text;
gint tab_stop;
gint max_tab_stop;
@@ -49,12 +50,13 @@ struct _IdeSourceSnippet
enum {
PROP_0,
PROP_BUFFER,
+ PROP_DESCRIPTION,
+ PROP_LANGUAGE,
PROP_MARK_BEGIN,
PROP_MARK_END,
+ PROP_SNIPPET_TEXT,
PROP_TAB_STOP,
PROP_TRIGGER,
- PROP_LANGUAGE,
- PROP_DESCRIPTION,
LAST_PROP
};
@@ -76,6 +78,28 @@ ide_source_snippet_new (const gchar *trigger,
return ret;
}
+const gchar *
+ide_source_snippet_get_snippet_text (IdeSourceSnippet *self)
+{
+ g_return_val_if_fail (IDE_IS_SOURCE_SNIPPET (self), NULL);
+
+ return self->snippet_text;
+}
+
+void
+ide_source_snippet_set_snippet_text (IdeSourceSnippet *self,
+ const gchar *snippet_text)
+{
+ g_return_if_fail (IDE_IS_SOURCE_SNIPPET (self));
+
+ if (!ide_str_equal0 (snippet_text, self->snippet_text))
+ {
+ g_free (self->snippet_text);
+ self->snippet_text = g_strdup (snippet_text);
+ g_object_notify_by_pspec (G_OBJECT (self), gParamSpecs [PROP_SNIPPET_TEXT]);
+ }
+}
+
/**
* ide_source_snippet_copy:
*
@@ -94,6 +118,7 @@ ide_source_snippet_copy (IdeSourceSnippet *self)
"trigger", self->trigger,
"language", self->language,
"description", self->description,
+ "snippet-text", self->snippet_text,
NULL);
for (i = 0; i < self->chunks->len; i++)
@@ -895,6 +920,10 @@ ide_source_snippet_get_property (GObject *object,
g_value_set_string (value, self->description);
break;
+ case PROP_SNIPPET_TEXT:
+ g_value_set_string (value, self->snippet_text);
+ break;
+
case PROP_TAB_STOP:
g_value_set_uint (value, self->tab_stop);
break;
@@ -926,6 +955,10 @@ ide_source_snippet_set_property (GObject *object,
ide_source_snippet_set_description (self, g_value_get_string (value));
break;
+ case PROP_SNIPPET_TEXT:
+ ide_source_snippet_set_snippet_text (self, g_value_get_string (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -992,15 +1025,20 @@ ide_source_snippet_class_init (IdeSourceSnippetClass *klass)
-1,
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
+ gParamSpecs [PROP_SNIPPET_TEXT] =
+ g_param_spec_string ("snippet-text",
+ _("Snippet Text"),
+ _("The entire snippet text from the source file."),
+ NULL,
+ (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
+
g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs);
}
static void
ide_source_snippet_init (IdeSourceSnippet *self)
{
- self->tab_stop = 0;
self->max_tab_stop = -1;
self->chunks = g_ptr_array_new_with_free_func (g_object_unref);
self->runs = g_array_new (FALSE, FALSE, sizeof (gint));
- self->description = NULL;
}
diff --git a/libide/ide-source-snippet.h b/libide/ide-source-snippet.h
index 8d679a8..a7c6e28 100644
--- a/libide/ide-source-snippet.h
+++ b/libide/ide-source-snippet.h
@@ -29,31 +29,34 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (IdeSourceSnippet, ide_source_snippet, IDE, SOURCE_SNIPPET, GObject)
-IdeSourceSnippet *ide_source_snippet_new (const gchar *trigger,
- const gchar *language);
-IdeSourceSnippet *ide_source_snippet_copy (IdeSourceSnippet *snippet);
-const gchar *ide_source_snippet_get_trigger (IdeSourceSnippet *snippet);
-void ide_source_snippet_set_trigger (IdeSourceSnippet *snippet,
- const gchar *trigger);
-const gchar *ide_source_snippet_get_language (IdeSourceSnippet *snippet);
-void ide_source_snippet_set_language (IdeSourceSnippet *snippet,
- const gchar *language);
-const gchar *ide_source_snippet_get_description (IdeSourceSnippet *snippet);
-void ide_source_snippet_set_description (IdeSourceSnippet *snippet,
- const gchar *description);
-void ide_source_snippet_add_chunk (IdeSourceSnippet *snippet,
- IdeSourceSnippetChunk *chunk);
-guint ide_source_snippet_get_n_chunks (IdeSourceSnippet *snippet);
-gint ide_source_snippet_get_tab_stop (IdeSourceSnippet *snippet);
-IdeSourceSnippetChunk *ide_source_snippet_get_nth_chunk (IdeSourceSnippet *snippet,
- guint n);
-void ide_source_snippet_get_chunk_range (IdeSourceSnippet *snippet,
- IdeSourceSnippetChunk *chunk,
- GtkTextIter *begin,
- GtkTextIter *end);
-GtkTextMark *ide_source_snippet_get_mark_begin (IdeSourceSnippet *snippet);
-GtkTextMark *ide_source_snippet_get_mark_end (IdeSourceSnippet *snippet);
-IdeSourceSnippetContext *ide_source_snippet_get_context (IdeSourceSnippet *snippet);
+IdeSourceSnippet *ide_source_snippet_new (const gchar *trigger,
+ const gchar *language);
+IdeSourceSnippet *ide_source_snippet_copy (IdeSourceSnippet *snippet);
+const gchar *ide_source_snippet_get_trigger (IdeSourceSnippet *snippet);
+void ide_source_snippet_set_trigger (IdeSourceSnippet *snippet,
+ const gchar *trigger);
+const gchar *ide_source_snippet_get_language (IdeSourceSnippet *snippet);
+void ide_source_snippet_set_language (IdeSourceSnippet *snippet,
+ const gchar *language);
+const gchar *ide_source_snippet_get_description (IdeSourceSnippet *snippet);
+void ide_source_snippet_set_description (IdeSourceSnippet *snippet,
+ const gchar *description);
+void ide_source_snippet_add_chunk (IdeSourceSnippet *snippet,
+ IdeSourceSnippetChunk *chunk);
+guint ide_source_snippet_get_n_chunks (IdeSourceSnippet *snippet);
+gint ide_source_snippet_get_tab_stop (IdeSourceSnippet *snippet);
+IdeSourceSnippetChunk *ide_source_snippet_get_nth_chunk (IdeSourceSnippet *snippet,
+ guint n);
+void ide_source_snippet_get_chunk_range (IdeSourceSnippet *snippet,
+ IdeSourceSnippetChunk *chunk,
+ GtkTextIter *begin,
+ GtkTextIter *end);
+GtkTextMark *ide_source_snippet_get_mark_begin (IdeSourceSnippet *snippet);
+GtkTextMark *ide_source_snippet_get_mark_end (IdeSourceSnippet *snippet);
+IdeSourceSnippetContext *ide_source_snippet_get_context (IdeSourceSnippet *snippet);
+const gchar *ide_source_snippet_get_snippet_text (IdeSourceSnippet *snippet);
+void ide_source_snippet_set_snippet_text (IdeSourceSnippet *snippet,
+ const gchar *snippet_text);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]