void book_mark_insert (WEdit * edit, long line, int c) { edit_book_mark_t *p, *q; p = book_mark_find (edit, line); #if 0 if (p->line == line) { /* already exists, so just change the color */ if (p->c != c) { p->c = c; edit->force |= REDRAW_LINE; } return; } #endif /* create list entry */ q = g_new (edit_book_mark_t, 1); q->line = line; q->c = c; q->next = p->next; /* insert into list */ q->prev = p; if (p->next != NULL) p->next->prev = q; p->next = q; edit->force |= REDRAW_LINE; }
gboolean book_mark_clear (WEdit * edit, long line, int c) { edit_book_mark_t *p, *q; gboolean r = FALSE; if (edit->book_mark == NULL) return r; for (p = book_mark_find (edit, line); p != NULL; p = q) { q = p->prev; if (p->line == line && (p->c == c || c == -1)) { r = TRUE; edit->book_mark = p->prev; p->prev->next = p->next; if (p->next != NULL) p->next->prev = p->prev; g_free (p); edit->force |= REDRAW_LINE; break; } } /* if there is only our dummy book mark left, clear it for speed */ if (edit->book_mark->line == -1 && edit->book_mark->next == NULL) { g_free (edit->book_mark); edit->book_mark = NULL; } return r; }
/* returns non-zero on not-found */ int book_mark_clear (WEdit * edit, int line, int c) { struct _book_mark *p, *q; int r = 1; if (!edit->book_mark) return r; for (p = book_mark_find (edit, line); p; p = q) { q = p->prev; if (p->line == line && (p->c == c || c == -1)) { r = 0; edit->force |= REDRAW_LINE; edit->book_mark = p->prev; p->prev->next = p->next; if (p->next) p->next->prev = p->prev; g_free (p); break; } } /* if there is only our dummy book mark left, clear it for speed */ if (edit->book_mark->line == -1 && !edit->book_mark->next) { g_free (edit->book_mark); edit->book_mark = 0; } return r; }
/* insert a bookmark at this line */ void book_mark_insert (WEdit *edit, int line, int c) { struct _book_mark *p, *q; p = book_mark_find (edit, line); #if 0 if (p->line == line) { /* already exists, so just change the color */ if (p->c != c) { edit->force |= REDRAW_LINE; p->c = c; } return; } #endif edit->force |= REDRAW_LINE; /* create list entry */ q = g_malloc0 (sizeof (struct _book_mark)); q->line = line; q->c = c; q->next = p->next; /* insert into list */ q->prev = p; if (p->next) p->next->prev = q; p->next = q; }
/* shift up bookmarks after this line */ void book_mark_dec (WEdit * edit, int line) { if (edit->book_mark) { struct _book_mark *p; p = book_mark_find (edit, line); for (p = p->next; p; p = p->next) { p->line--; } } }
void book_mark_dec (WEdit * edit, long line) { if (edit->book_mark != NULL) { edit_book_mark_t *p; p = book_mark_find (edit, line); for (p = p->next; p != NULL; p = p->next) p->line--; } }
/* returns true if a bookmark exists at this line of color c */ int book_mark_query_color (WEdit * edit, int line, int c) { struct _book_mark *p; if (!edit->book_mark) return 0; for (p = book_mark_find (edit, line); p; p = p->prev) { if (p->line != line) return 0; if (p->c == c) return 1; } return 0; }
gboolean book_mark_query_color (WEdit * edit, long line, int c) { if (edit->book_mark != NULL) { edit_book_mark_t *p; for (p = book_mark_find (edit, line); p != NULL; p = p->prev) { if (p->line != line) return FALSE; if (p->c == c) return TRUE; } } return FALSE; }
void book_mark_serialize (WEdit * edit, int color) { if (edit->serialized_bookmarks != NULL) g_array_set_size (edit->serialized_bookmarks, 0); if (edit->book_mark != NULL) { edit_book_mark_t *p; if (edit->serialized_bookmarks == NULL) edit->serialized_bookmarks = g_array_sized_new (FALSE, FALSE, sizeof (size_t), MAX_SAVED_BOOKMARKS); for (p = book_mark_find (edit, 0); p != NULL; p = p->next) if (p->c == color && p->line >= 0) g_array_append_val (edit->serialized_bookmarks, p->line); } }