#ifndef __DW_EXT_ITERATOR_H__ #define __DW_EXT_ITERATOR_H__ #include "dw_widget.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ typedef struct _DwExtIterator { DwIterator **stack; gint stack_top; gint stack_max; DwContent content; } DwExtIterator; typedef struct _DwWordIterator { /* The current word. NULL, when at the end or at the beginning */ gchar *word; /* private stuff */ DwExtIterator *iterator; gint *word_splitpos; /* the positions of the words within * iterator->content.data.text, as returned * by a_Misc_strsplitpos */ gint word_pos; /* the current position within word_splitpos */ gint content_hl_start, content_hl_end; } DwWordIterator; DwExtIterator* a_Dw_ext_iterator_new (DwIterator *it); DwExtIterator* a_Dw_ext_iterator_new_variant (DwExtIterator *base, DwIterator *it); gboolean a_Dw_ext_iterator_next (DwExtIterator *eit); gboolean a_Dw_ext_iterator_prev (DwExtIterator *eit); DwExtIterator* a_Dw_ext_iterator_clone (DwExtIterator *eit); gint a_Dw_ext_iterator_compare (DwExtIterator *eit1, DwExtIterator *eit2); void a_Dw_ext_iterator_free (DwExtIterator *eit); #define a_Dw_ext_iterator_highlight(eit, s, e, l) \ a_Dw_iterator_highlight((eit)->stack[(eit)->stack_top], \ s, e, l) #define a_Dw_ext_iterator_unhighlight(eit, l) \ a_Dw_iterator_unhighlight((eit)->stack[(eit)->stack_top], l) #define a_Dw_ext_iterator_get_allocation(eit, s, e, a) \ a_Dw_iterator_get_allocation((eit)->stack[(eit)->stack_top],\ s, e, a) #define a_Dw_ext_iterator_scroll_to(eit1, eit2, s, e, hp, vp) \ a_Dw_iterator_scroll_to((eit1)->stack[(eit1)->stack_top], \ (eit2)->stack[(eit2)->stack_top], \ s, e, hp, vp) #define a_Dw_ext_iterator_text(eit) ((eit) ? \ a_Dw_iterator_text((eit)->stack[(eit)->stack_top]) : \ "[NULL]") DwWordIterator* a_Dw_word_iterator_new (DwWidget *widget); gboolean a_Dw_word_iterator_next (DwWordIterator *it); gboolean a_Dw_word_iterator_prev (DwWordIterator *it); void a_Dw_word_iterator_highlight (DwWordIterator *it, gint start, gint end, DwHighlightLayer layer); void a_Dw_word_iterator_get_allocation (DwWordIterator *it, gint start, gint end, DwAllocation *allocation); void a_Dw_word_iterator_scroll_to (DwWordIterator *it1, DwWordIterator *it2, gint start, gint end, DwHPosition hpos, DwVPosition vpos); DwWordIterator* a_Dw_word_iterator_clone (DwWordIterator *it); void a_Dw_word_iterator_free (DwWordIterator *it); #define a_Dw_word_iterator_unhighlight(it, l) \ a_Dw_word_iterator_highlight(it, -1, -1, l) #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __DW_EXT_ITERATOR_H__ */