]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtktextbtree.h
GtkLabelAccessible: Sanity check _get_text() input values
[~andy/gtk] / gtk / gtktextbtree.h
index 3763ed5a21d1442be2040867b4e194afc13d1428..08662188483559283981abf810580d6f29919a2d 100644 (file)
@@ -1,5 +1,39 @@
-#ifndef GTK_TEXT_BTREE_H
-#define GTK_TEXT_BTREE_H
+/* GTK - The GIMP Toolkit
+ * gtktextbtree.h Copyright (C) 2000 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GTK+ Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#ifndef __GTK_TEXT_BTREE_H__
+#define __GTK_TEXT_BTREE_H__
+
+#if 0
+#define DEBUG_VALIDATION_AND_SCROLLING
+#endif
+
+#ifdef DEBUG_VALIDATION_AND_SCROLLING
+#define DV(x) (x)
+#else
+#define DV(x)
+#endif
 
 #include <gtk/gtktextbuffer.h>
 #include <gtk/gtktexttag.h>
@@ -8,9 +42,7 @@
 #include <gtk/gtktextsegment.h>
 #include <gtk/gtktextiter.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
 
 GtkTextBTree  *_gtk_text_btree_new        (GtkTextTagTable *table,
                                            GtkTextBuffer   *buffer);
@@ -23,6 +55,11 @@ guint _gtk_text_btree_get_chars_changed_stamp    (GtkTextBTree *tree);
 guint _gtk_text_btree_get_segments_changed_stamp (GtkTextBTree *tree);
 void  _gtk_text_btree_segments_changed           (GtkTextBTree *tree);
 
+gboolean _gtk_text_btree_is_end (GtkTextBTree       *tree,
+                                 GtkTextLine        *line,
+                                 GtkTextLineSegment *seg,
+                                 int                 byte_index,
+                                 int                 char_offset);
 
 /* Indexable segment mutation */
 
@@ -31,10 +68,11 @@ void _gtk_text_btree_delete        (GtkTextIter *start,
 void _gtk_text_btree_insert        (GtkTextIter *iter,
                                     const gchar *text,
                                     gint         len);
-void __gtk_text_btree_insert_pixbuf (GtkTextIter *iter,
-                                     GdkPixbuf   *pixbuf);
+void _gtk_text_btree_insert_pixbuf (GtkTextIter *iter,
+                                    GdkPixbuf   *pixbuf);
 
-GtkTextChildAnchor* _gtk_text_btree_create_child_anchor (GtkTextIter *iter);
+void _gtk_text_btree_insert_child_anchor (GtkTextIter        *iter,
+                                          GtkTextChildAnchor *anchor);
 
 void _gtk_text_btree_unregister_child_anchor (GtkTextChildAnchor *anchor);
 
@@ -52,7 +90,8 @@ void         _gtk_text_btree_remove_view       (GtkTextBTree      *tree,
                                                 gpointer           view_id);
 void         _gtk_text_btree_invalidate_region (GtkTextBTree      *tree,
                                                 const GtkTextIter *start,
-                                                const GtkTextIter *end);
+                                                const GtkTextIter *end,
+                                                gboolean           cursors_only);
 void         _gtk_text_btree_get_view_size     (GtkTextBTree      *tree,
                                                 gpointer           view_id,
                                                 gint              *width,
@@ -65,9 +104,9 @@ gboolean     _gtk_text_btree_validate          (GtkTextBTree      *tree,
                                                 gint              *y,
                                                 gint              *old_height,
                                                 gint              *new_height);
-void         __gtk_text_btree_validate_line     (GtkTextBTree      *tree,
-                                                 GtkTextLine       *line,
-                                                 gpointer           view_id);
+void         _gtk_text_btree_validate_line     (GtkTextBTree      *tree,
+                                                GtkTextLine       *line,
+                                                gpointer           view_id);
 
 /* Tag */
 
@@ -81,10 +120,14 @@ void _gtk_text_btree_tag (const GtkTextIter *start,
 GtkTextLine * _gtk_text_btree_get_line          (GtkTextBTree      *tree,
                                                  gint               line_number,
                                                  gint              *real_line_number);
-GtkTextLine * __gtk_text_btree_get_line_at_char  (GtkTextBTree      *tree,
-                                                  gint               char_index,
-                                                  gint              *line_start_index,
-                                                  gint              *real_char_index);
+GtkTextLine * _gtk_text_btree_get_line_no_last  (GtkTextBTree      *tree,
+                                                 gint               line_number,
+                                                 gint              *real_line_number);
+GtkTextLine * _gtk_text_btree_get_end_iter_line (GtkTextBTree      *tree);
+GtkTextLine * _gtk_text_btree_get_line_at_char  (GtkTextBTree      *tree,
+                                                 gint               char_index,
+                                                 gint              *line_start_index,
+                                                 gint              *real_char_index);
 GtkTextTag**  _gtk_text_btree_get_tags          (const GtkTextIter *iter,
                                                  gint              *num_tags);
 gchar        *_gtk_text_btree_get_text          (const GtkTextIter *start,
@@ -101,24 +144,24 @@ gboolean      _gtk_text_btree_char_is_invisible (const GtkTextIter *iter);
 void     _gtk_text_btree_get_iter_at_char         (GtkTextBTree       *tree,
                                                    GtkTextIter        *iter,
                                                    gint                char_index);
-void     __gtk_text_btree_get_iter_at_line_char    (GtkTextBTree       *tree,
-                                                    GtkTextIter        *iter,
-                                                    gint                line_number,
-                                                    gint                char_index);
-void     __gtk_text_btree_get_iter_at_line_byte    (GtkTextBTree       *tree,
-                                                    GtkTextIter        *iter,
-                                                    gint                line_number,
-                                                    gint                byte_index);
+void     _gtk_text_btree_get_iter_at_line_char    (GtkTextBTree       *tree,
+                                                   GtkTextIter        *iter,
+                                                   gint                line_number,
+                                                   gint                char_index);
+void     _gtk_text_btree_get_iter_at_line_byte    (GtkTextBTree       *tree,
+                                                   GtkTextIter        *iter,
+                                                   gint                line_number,
+                                                   gint                byte_index);
 gboolean _gtk_text_btree_get_iter_from_string     (GtkTextBTree       *tree,
                                                    GtkTextIter        *iter,
                                                    const gchar        *string);
-gboolean __gtk_text_btree_get_iter_at_mark_name    (GtkTextBTree       *tree,
-                                                    GtkTextIter        *iter,
-                                                    const gchar        *mark_name);
+gboolean _gtk_text_btree_get_iter_at_mark_name    (GtkTextBTree       *tree,
+                                                   GtkTextIter        *iter,
+                                                   const gchar        *mark_name);
 void     _gtk_text_btree_get_iter_at_mark         (GtkTextBTree       *tree,
                                                    GtkTextIter        *iter,
                                                    GtkTextMark        *mark);
-void     _gtk_text_btree_get_last_iter            (GtkTextBTree       *tree,
+void     _gtk_text_btree_get_end_iter             (GtkTextBTree       *tree,
                                                    GtkTextIter        *iter);
 void     _gtk_text_btree_get_iter_at_line         (GtkTextBTree       *tree,
                                                    GtkTextIter        *iter,
@@ -144,8 +187,8 @@ GtkTextMark        *_gtk_text_btree_set_mark                (GtkTextBTree
                                                              gboolean            left_gravity,
                                                              const GtkTextIter  *index,
                                                              gboolean           should_exist);
-void                __gtk_text_btree_remove_mark_by_name     (GtkTextBTree       *tree,
-                                                              const gchar        *name);
+void                _gtk_text_btree_remove_mark_by_name     (GtkTextBTree       *tree,
+                                                             const gchar        *name);
 void                _gtk_text_btree_remove_mark             (GtkTextBTree       *tree,
                                                              GtkTextMark        *segment);
 gboolean            _gtk_text_btree_get_selection_bounds    (GtkTextBTree       *tree,
@@ -153,10 +196,15 @@ gboolean            _gtk_text_btree_get_selection_bounds    (GtkTextBTree
                                                              GtkTextIter        *end);
 void                _gtk_text_btree_place_cursor            (GtkTextBTree       *tree,
                                                              const GtkTextIter  *where);
+void                _gtk_text_btree_select_range            (GtkTextBTree       *tree,
+                                                             const GtkTextIter  *ins,
+                                                            const GtkTextIter  *bound);
 gboolean            _gtk_text_btree_mark_is_insert          (GtkTextBTree       *tree,
                                                              GtkTextMark        *segment);
 gboolean            _gtk_text_btree_mark_is_selection_bound (GtkTextBTree       *tree,
                                                              GtkTextMark        *segment);
+GtkTextMark        *_gtk_text_btree_get_insert             (GtkTextBTree       *tree);
+GtkTextMark        *_gtk_text_btree_get_selection_bound            (GtkTextBTree       *tree);
 GtkTextMark        *_gtk_text_btree_get_mark_by_name        (GtkTextBTree       *tree,
                                                              const gchar        *name);
 GtkTextLine *       _gtk_text_btree_first_could_contain_tag (GtkTextBTree       *tree,
@@ -172,8 +220,8 @@ struct _GtkTextLineData {
   gpointer view_id;
   GtkTextLineData *next;
   gint height;
-  gint width : 24;
-  gint valid : 8;
+  signed int width : 24;
+  guint valid : 8;             /* Actually a boolean */
 };
 
 /*
@@ -192,6 +240,9 @@ struct _GtkTextLine {
   GtkTextLineSegment *segments; /* First in ordered list of segments
                                  * that make up the line. */
   GtkTextLineData *views;      /* data stored here by views */
+  guchar dir_strong;                /* BiDi algo dir of line */
+  guchar dir_propagated_back;       /* BiDi algo dir of next line */
+  guchar dir_propagated_forward;    /* BiDi algo dir of prev line */
 };
 
 
@@ -204,9 +255,12 @@ gboolean            _gtk_text_line_byte_has_tag               (GtkTextLine
                                                                GtkTextBTree        *tree,
                                                                gint                 byte_in_line,
                                                                GtkTextTag          *tag);
-gboolean            _gtk_text_line_is_last                    (GtkTextLine  *line,
-                                                               GtkTextBTree *tree);
+gboolean            _gtk_text_line_is_last                    (GtkTextLine         *line,
+                                                               GtkTextBTree        *tree);
+gboolean            _gtk_text_line_contains_end_iter          (GtkTextLine         *line,
+                                                               GtkTextBTree        *tree);
 GtkTextLine *       _gtk_text_line_next                       (GtkTextLine         *line);
+GtkTextLine *       _gtk_text_line_next_excluding_last        (GtkTextLine         *line);
 GtkTextLine *       _gtk_text_line_previous                   (GtkTextLine         *line);
 void                _gtk_text_line_add_data                   (GtkTextLine         *line,
                                                                GtkTextLineData     *data);
@@ -225,26 +279,26 @@ GtkTextLineSegment *_gtk_text_line_byte_to_segment            (GtkTextLine
 GtkTextLineSegment *_gtk_text_line_char_to_segment            (GtkTextLine         *line,
                                                                gint                 char_offset,
                                                                gint                *seg_offset);
-void                _gtk_text_line_byte_locate                (GtkTextLine         *line,
+gboolean            _gtk_text_line_byte_locate                (GtkTextLine         *line,
                                                                gint                 byte_offset,
                                                                GtkTextLineSegment **segment,
                                                                GtkTextLineSegment **any_segment,
                                                                gint                *seg_byte_offset,
                                                                gint                *line_byte_offset);
-void                _gtk_text_line_char_locate                (GtkTextLine         *line,
+gboolean            _gtk_text_line_char_locate                (GtkTextLine         *line,
                                                                gint                 char_offset,
                                                                GtkTextLineSegment **segment,
                                                                GtkTextLineSegment **any_segment,
                                                                gint                *seg_char_offset,
                                                                gint                *line_char_offset);
-void                __gtk_text_line_byte_to_char_offsets       (GtkTextLine         *line,
-                                                                gint                 byte_offset,
-                                                                gint                *line_char_offset,
-                                                                gint                *seg_char_offset);
-void                __gtk_text_line_char_to_byte_offsets       (GtkTextLine         *line,
-                                                                gint                 char_offset,
-                                                                gint                *line_byte_offset,
-                                                                gint                *seg_byte_offset);
+void                _gtk_text_line_byte_to_char_offsets       (GtkTextLine         *line,
+                                                               gint                 byte_offset,
+                                                               gint                *line_char_offset,
+                                                               gint                *seg_char_offset);
+void                _gtk_text_line_char_to_byte_offsets       (GtkTextLine         *line,
+                                                               gint                 char_offset,
+                                                               gint                *line_byte_offset,
+                                                               gint                *seg_byte_offset);
 GtkTextLineSegment *_gtk_text_line_byte_to_any_segment        (GtkTextLine         *line,
                                                                gint                 byte_offset,
                                                                gint                *seg_offset);
@@ -255,13 +309,15 @@ gint                _gtk_text_line_byte_to_char               (GtkTextLine
                                                                gint                 byte_offset);
 gint                _gtk_text_line_char_to_byte               (GtkTextLine         *line,
                                                                gint                 char_offset);
-GtkTextLine    *    __gtk_text_line_next_could_contain_tag     (GtkTextLine         *line,
-                                                                GtkTextBTree        *tree,
-                                                                GtkTextTag          *tag);
-GtkTextLine    *    __gtk_text_line_previous_could_contain_tag (GtkTextLine         *line,
-                                                                GtkTextBTree        *tree,
-                                                                GtkTextTag          *tag);
+GtkTextLine    *    _gtk_text_line_next_could_contain_tag     (GtkTextLine         *line,
+                                                               GtkTextBTree        *tree,
+                                                               GtkTextTag          *tag);
+GtkTextLine    *    _gtk_text_line_previous_could_contain_tag (GtkTextLine         *line,
+                                                               GtkTextBTree        *tree,
+                                                               GtkTextTag          *tag);
 
+GtkTextLineData    *_gtk_text_line_data_new                   (GtkTextLayout     *layout,
+                                                               GtkTextLine       *line);
 
 /* Debug */
 void _gtk_text_btree_check (GtkTextBTree *tree);
@@ -275,10 +331,15 @@ void _gtk_change_node_toggle_count  (GtkTextBTreeNode   *node,
                                      GtkTextTagInfo     *info,
                                      gint                delta);
 
+/* for gtktextmark.c */
+void _gtk_text_btree_release_mark_segment (GtkTextBTree       *tree,
+                                           GtkTextLineSegment *segment);
+
+/* for coordination with the tag table */
+void _gtk_text_btree_notify_will_remove_tag (GtkTextBTree *tree,
+                                             GtkTextTag   *tag);
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif