Codebase list dillo / debian/0.8.6-3 src / dw_ext_iterator.h
debian/0.8.6-3

Tree @debian/0.8.6-3 (Download .tar.gz)

dw_ext_iterator.h @debian/0.8.6-3raw · history · blame

#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__ */