? fold.patch
? po/stamp-it
Index: gtksourceview/gtksourcecontextengine.c
===================================================================
RCS file: /cvs/gnome/gtksourceview/gtksourceview/Attic/gtksourcecontextengine.c,v
retrieving revision 1.1.4.1
diff -u -p -r1.1.4.1 gtksourcecontextengine.c
--- gtksourceview/gtksourcecontextengine.c	4 Dec 2005 16:29:37 -0000	1.1.4.1
+++ gtksourceview/gtksourcecontextengine.c	7 Dec 2005 10:26:53 -0000
@@ -139,9 +139,12 @@ struct _ContextDefinition
 	/* Tag used for contexts of this type. */
 	GtkSourceTag		*tag;
 
-	/* Does this context should end before the end of the line? */
+	/* Does this context end at the end of the line? */
 	gboolean		 end_at_line_end;
 
+	/* Is this context foldable in the view? */
+	gboolean		 foldable;
+
 	/* This is a list of DefinitionChild pointers. */
 	GSList			*children;
 
@@ -1075,6 +1078,7 @@ definition_new (gchar              *id,
 		gchar              *style,
 		gboolean            extend_parent,
 		gboolean            end_at_line_end,
+		gboolean            foldable,
 		GError            **error)
 {
 	ContextDefinition *definition;
@@ -1153,6 +1157,7 @@ definition_new (gchar              *id,
 	definition->type = type;
 	definition->extend_parent = extend_parent;
 	definition->end_at_line_end = end_at_line_end;
+	definition->foldable = foldable;
 	definition->children = NULL;
 	definition->tag = NULL;
 	definition->sub_patterns = NULL;
@@ -3334,7 +3339,7 @@ update_syntax (GtkSourceContextEngine *c
 		gtk_text_iter_forward_to_line_end (&end);
 
 	/* We read all the batch if delta is zero or if the text
-	 * iserted/deleted is long (so rarely the removed tree can
+	 * inserted/deleted is long (so rarely the removed tree can
 	 * be used.) */
 	LineReader *reader;
 	reader = line_reader_new (&start, &end,
@@ -3537,13 +3542,16 @@ apply_tag (GtkSourceBuffer *buffer,
 	GtkSourceTag *clear_tag = NULL;
 	GtkTextBuffer *text_buffer = GTK_TEXT_BUFFER (buffer);
 
-	if (context->definition->tag != NULL)
+	if (context->definition->tag != NULL || context->definition->foldable)
 	{
 		gtk_text_buffer_get_iter_at_offset (text_buffer, &start_iter,
 			MAX (context->start_at, start_region_offset));
 		gtk_text_buffer_get_iter_at_offset (text_buffer, &end_iter,
 			MIN (context->end_at, end_region_offset));
+	}
 
+	if (context->definition->tag != NULL)
+	{
 		if (context->clear_tag != NULL)
 			gtk_text_buffer_remove_tag (GTK_TEXT_BUFFER (buffer),
 				GTK_TEXT_TAG (context->clear_tag),
@@ -3567,6 +3575,14 @@ apply_tag (GtkSourceBuffer *buffer,
 			ancestor = ancestor->parent;
 		}
 	}
+	
+	if (context->definition->foldable &&
+	    gtk_text_iter_get_line (&start_iter) !=
+	    gtk_text_iter_get_line (&end_iter))
+	{
+		gtk_source_buffer_add_fold (GTK_SOURCE_BUFFER (text_buffer),
+					    &start_iter, &end_iter);
+	}
 
 	if (clear_tag != NULL)
 		tag_priority = gtk_text_tag_get_priority (
@@ -3780,6 +3796,7 @@ gtk_source_context_engine_define_context
 					  gchar                   *style,
 					  gboolean                 extend_parent,
 					  gboolean                 end_at_line_end,
+					  gboolean                 foldable,
 					  GError                 **error)
 {
 	ContextDefinition *definition, *parent = NULL;
@@ -3847,7 +3864,7 @@ gtk_source_context_engine_define_context
 
 	definition = definition_new (id, type, parent, match_regex,
 		start_regex, end_regex, style, extend_parent, end_at_line_end,
-		error);
+		foldable, error);
 	if (definition == NULL)
 		return FALSE;
 	g_hash_table_insert (priv->definitions, g_strdup (id), definition);
Index: gtksourceview/gtksourcecontextengine.h
===================================================================
RCS file: /cvs/gnome/gtksourceview/gtksourceview/Attic/gtksourcecontextengine.h,v
retrieving revision 1.1.4.1
diff -u -p -r1.1.4.1 gtksourcecontextengine.h
--- gtksourceview/gtksourcecontextengine.h	4 Dec 2005 16:29:37 -0000	1.1.4.1
+++ gtksourceview/gtksourcecontextengine.h	7 Dec 2005 10:26:53 -0000
@@ -81,6 +81,7 @@ gboolean	 gtk_source_context_engine_defi
 							 gchar			 *style,
 							 gboolean		  extend_parent,
 							 gboolean		  end_at_line_end,
+							 gboolean		  foldable,
 							 GError			**error);
 
 gboolean	 gtk_source_context_engine_add_sub_pattern
Index: gtksourceview/gtksourcelanguage-parser-2.c
===================================================================
RCS file: /cvs/gnome/gtksourceview/gtksourceview/Attic/gtksourcelanguage-parser-2.c,v
retrieving revision 1.1.6.1
diff -u -p -r1.1.6.1 gtksourcelanguage-parser-2.c
--- gtksourceview/gtksourcelanguage-parser-2.c	4 Dec 2005 16:29:37 -0000	1.1.6.1
+++ gtksourceview/gtksourcelanguage-parser-2.c	7 Dec 2005 10:26:54 -0000
@@ -287,6 +287,7 @@ create_definition (ParserState *parser_s
 	gchar *tmp;
 	gboolean extend_parent = TRUE;
 	gboolean end_at_line_end = FALSE;
+	gboolean fold = FALSE;
 
 	xmlNode *context_node, *child;
 
@@ -391,6 +392,11 @@ create_definition (ParserState *parser_s
 			}
 			end_flags = flags;
 		}
+		else if (strcmp ("fold", child->name) == 0)
+		{
+			/* <fold/> */
+			fold = TRUE;
+		}
 		else if (strcmp ("prefix", child->name) == 0)
 		{
 			/* <prefix> */
@@ -514,7 +520,7 @@ create_definition (ParserState *parser_s
 		gtk_source_context_engine_define_context (
 				parser_state->engine, id, parent_id,
 				match, start, end, style, 
-				extend_parent, end_at_line_end,
+				extend_parent, end_at_line_end, fold,
 				&tmp_error);
 	}
 
Index: gtksourceview/gtksourcelanguagesmanager.c
===================================================================
RCS file: /cvs/gnome/gtksourceview/gtksourceview/gtksourcelanguagesmanager.c,v
retrieving revision 1.5.10.1
diff -u -p -r1.5.10.1 gtksourcelanguagesmanager.c
--- gtksourceview/gtksourcelanguagesmanager.c	4 Dec 2005 16:29:37 -0000	1.5.10.1
+++ gtksourceview/gtksourcelanguagesmanager.c	7 Dec 2005 10:26:54 -0000
@@ -37,7 +37,7 @@
 
 #define DEFAULT_LANGUAGE_DIR		DATADIR "/gtksourceview-1.0/language-specs"
 #define USER_LANGUAGE_DIR		"gtksourceview-1.0/language-specs"
-#define USER_CONFIG_BASE_DIR	".gnome2"
+#define USER_CONFIG_BASE_DIR		".gnome2"
 
 enum {
 	PROP_0,
@@ -53,8 +53,8 @@ struct _GtkSourceLanguagesManagerPrivate
 
 static GObjectClass *parent_class = NULL;
 
-static void  gtk_source_languages_manager_class_init		(GtkSourceLanguagesManagerClass *klass);
-static void  gtk_source_languages_manager_instance_init	(GtkSourceLanguagesManager *lm);
+static void	 gtk_source_languages_manager_class_init	(GtkSourceLanguagesManagerClass *klass);
+static void	 gtk_source_languages_manager_instance_init	(GtkSourceLanguagesManager *lm);
 static void	 gtk_source_languages_manager_finalize	 	(GObject 		   *object);
 
 static void	 slist_deep_free 				(GSList 		   *list);
@@ -375,8 +375,8 @@ gtk_source_languages_manager_get_languag
  * identified by the given @id.
  **/
 GtkSourceLanguage *
-gtk_source_languages_manager_get_language_from_id (GtkSourceLanguagesManager 	*lm,
-							  const gchar 		*id)
+gtk_source_languages_manager_get_language_from_id (GtkSourceLanguagesManager *lm,
+						   const gchar               *id)
 {
 	const GSList *languages;
 	gboolean found = FALSE;
Index: gtksourceview/language-specs/c.lang
===================================================================
RCS file: /cvs/gnome/gtksourceview/gtksourceview/language-specs/c.lang,v
retrieving revision 1.10.12.1
diff -u -p -r1.10.12.1 c.lang
--- gtksourceview/language-specs/c.lang	4 Dec 2005 16:29:38 -0000	1.10.12.1
+++ gtksourceview/language-specs/c.lang	7 Dec 2005 10:26:54 -0000
@@ -42,6 +42,7 @@
                 <context id="comment-multiline" style-ref="comment-multiline">
                     <start>\/\*</start>
                     <end>\*\/</end>
+                    <fold></fold>
                     <include>
                         <context id="open-comment-in-comment" extend-parent="false" style-ref="error">
                             <match>\/\*</match>
Index: gtksourceview/language-specs/language2.rng
===================================================================
RCS file: /cvs/gnome/gtksourceview/gtksourceview/language-specs/Attic/language2.rng,v
retrieving revision 1.1.4.1
diff -u -p -r1.1.4.1 language2.rng
--- gtksourceview/language-specs/language2.rng	4 Dec 2005 16:29:38 -0000	1.1.4.1
+++ gtksourceview/language-specs/language2.rng	7 Dec 2005 10:26:54 -0000
@@ -239,6 +239,11 @@
                 <text/>
             </element>
         </optional>
+        <optional>
+            <element name="fold">
+                <text/>
+            </element>
+        </optional>
 
         <optional>
             <element name="include">
Index: tests/test-widget.c
===================================================================
RCS file: /cvs/gnome/gtksourceview/tests/test-widget.c,v
retrieving revision 1.11.10.2
diff -u -p -r1.11.10.2 test-widget.c
--- tests/test-widget.c	4 Dec 2005 16:29:40 -0000	1.11.10.2
+++ tests/test-widget.c	7 Dec 2005 10:26:54 -0000
@@ -1048,7 +1048,7 @@ main (int argc, char *argv[])
 	GtkSourceLanguagesManager *lm;
 	GtkSourceBuffer *buffer;
 	GtkSourceView *view;
-	GtkTextIter begin, end;
+	//GtkTextIter begin, end;
 	GSList *lang_dirs;
 	
 	/* initialization */
@@ -1078,6 +1078,7 @@ main (int argc, char *argv[])
 
 		gtk_source_buffer_set_folds_enabled (buffer, TRUE);
 
+#if 0
 		/* main() fold. */		
 		gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (buffer), &begin, 33);
 		gtk_text_iter_forward_to_line_end (&begin);
@@ -1109,6 +1110,7 @@ main (int argc, char *argv[])
 		gtk_text_iter_forward_to_line_end (&begin);
 		gtk_text_buffer_get_iter_at_line (GTK_TEXT_BUFFER (buffer), &end, 55);
 		gtk_source_buffer_add_fold (buffer, &begin, &end);
+#endif
 	}
 
 	gtk_window_set_default_size (GTK_WINDOW (window), 500, 500);

