+static void reorder_list(GtkTextBuffer *buffer, const GtkTextIter *begin) {
+ GtkTextIter i = *begin;
+
+ GtkTextChildAnchor *anchor = NULL;
+ GtkTextChildAnchor *prevAnchor = NULL;
+ int line_is_list = 0;
+ int num = 1;
+
+ while(gtk_text_iter_forward_char(&i)) {
+ if(gtk_text_iter_get_char(&i) == '\n') {
+ if(!line_is_list) {
+ break;
+ }
+ line_is_list = 0;
+ }
+
+ anchor = gtk_text_iter_get_child_anchor(&i);
+ if(anchor && anchor != prevAnchor) {
+ EmbeddedWidget *em = g_object_get_data(G_OBJECT(anchor), "em");
+ if(em && em->type == EMBEDDED_WIDGET_LIST) {
+ line_is_list = 1;
+ if(em->intdata1 == 0) {
+ em->intdata2 = num++;
+ ui_widget_redraw(em->widget);
+ }
+ }
+ }
+ prevAnchor = anchor;
+ }
+}
+
+static int get_list_begin(GtkTextBuffer *buffer, const GtkTextIter *iter, GtkTextIter *begin) {
+ GtkTextIter i = *iter;
+ GtkTextIter prev = i;
+ int line_is_list = 0;
+ int is_list = 0;
+
+ GtkTextChildAnchor *anchor = NULL;
+ GtkTextChildAnchor *prevAnchor = NULL;
+
+ while(gtk_text_iter_backward_char(&i)) {
+ if(gtk_text_iter_get_char(&i) == '\n') {
+ if(!line_is_list) {
+ *begin = prev;
+ return is_list;
+ }
+ line_is_list = 0;
+ }
+
+ anchor = gtk_text_iter_get_child_anchor(&i);
+ if(anchor && anchor != prevAnchor) {
+ EmbeddedWidget *em = g_object_get_data(G_OBJECT(anchor), "em");
+ if(em && em->type == EMBEDDED_WIDGET_LIST) {
+ line_is_list = 1;
+ is_list = 1;
+ }
+ }
+ prevAnchor = anchor;
+
+ prev = i;
+ }
+ *begin = prev;
+
+ return is_list;
+}
+