forked from AuroraMiddleware/gtk
GtkTextBuffer: Add accessible api
These functions match closely to the AtkText interface; they will be used in the GtkTextView accessible implementation. Keep them private for now.
This commit is contained in:
parent
d15319b717
commit
aa291863bb
@ -4448,3 +4448,302 @@ _gtk_text_buffer_spew (GtkTextBuffer *buffer)
|
||||
{
|
||||
_gtk_text_btree_spew (get_btree (buffer));
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_text_buffer_get_text_before (GtkTextBuffer *buffer,
|
||||
AtkTextBoundary boundary_type,
|
||||
GtkTextIter *position,
|
||||
GtkTextIter *start,
|
||||
GtkTextIter *end)
|
||||
{
|
||||
gint line_number;
|
||||
|
||||
*start = *position;
|
||||
*end = *start;
|
||||
|
||||
switch (boundary_type)
|
||||
{
|
||||
case ATK_TEXT_BOUNDARY_CHAR:
|
||||
gtk_text_iter_backward_char (start);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_WORD_START:
|
||||
if (!gtk_text_iter_starts_word (start))
|
||||
gtk_text_iter_backward_word_start (start);
|
||||
*end = *start;
|
||||
gtk_text_iter_backward_word_start (start);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_WORD_END:
|
||||
if (gtk_text_iter_inside_word (start) &&
|
||||
!gtk_text_iter_starts_word (start))
|
||||
gtk_text_iter_backward_word_start (start);
|
||||
while (!gtk_text_iter_ends_word (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
*end = *start;
|
||||
gtk_text_iter_backward_word_start (start);
|
||||
while (!gtk_text_iter_ends_word (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_SENTENCE_START:
|
||||
if (!gtk_text_iter_starts_sentence (start))
|
||||
gtk_text_iter_backward_sentence_start (start);
|
||||
*end = *start;
|
||||
gtk_text_iter_backward_sentence_start (start);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_SENTENCE_END:
|
||||
if (gtk_text_iter_inside_sentence (start) &&
|
||||
!gtk_text_iter_starts_sentence (start))
|
||||
gtk_text_iter_backward_sentence_start (start);
|
||||
while (!gtk_text_iter_ends_sentence (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
*end = *start;
|
||||
gtk_text_iter_backward_sentence_start (start);
|
||||
while (!gtk_text_iter_ends_sentence (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_LINE_START:
|
||||
line_number = gtk_text_iter_get_line (start);
|
||||
if (line_number == 0)
|
||||
{
|
||||
gtk_text_buffer_get_iter_at_offset (buffer, start, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_text_iter_backward_line (start);
|
||||
gtk_text_iter_forward_line (start);
|
||||
}
|
||||
*end = *start;
|
||||
gtk_text_iter_backward_line (start);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_LINE_END:
|
||||
line_number = gtk_text_iter_get_line (start);
|
||||
if (line_number == 0)
|
||||
{
|
||||
gtk_text_buffer_get_iter_at_offset (buffer, start, 0);
|
||||
*end = *start;
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_text_iter_backward_line (start);
|
||||
*end = *start;
|
||||
while (!gtk_text_iter_ends_line (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
gtk_text_iter_forward_to_line_end (end);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_text_buffer_get_text_at (GtkTextBuffer *buffer,
|
||||
AtkTextBoundary boundary_type,
|
||||
GtkTextIter *position,
|
||||
GtkTextIter *start,
|
||||
GtkTextIter *end)
|
||||
{
|
||||
gint line_number;
|
||||
|
||||
*start = *position;
|
||||
*end = *start;
|
||||
|
||||
switch (boundary_type)
|
||||
{
|
||||
case ATK_TEXT_BOUNDARY_CHAR:
|
||||
gtk_text_iter_forward_char (end);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_WORD_START:
|
||||
if (!gtk_text_iter_starts_word (start))
|
||||
gtk_text_iter_backward_word_start (start);
|
||||
if (gtk_text_iter_inside_word (end))
|
||||
gtk_text_iter_forward_word_end (end);
|
||||
while (!gtk_text_iter_starts_word (end))
|
||||
{
|
||||
if (!gtk_text_iter_forward_char (end))
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_WORD_END:
|
||||
if (gtk_text_iter_inside_word (start) &&
|
||||
!gtk_text_iter_starts_word (start))
|
||||
gtk_text_iter_backward_word_start (start);
|
||||
while (!gtk_text_iter_ends_word (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
gtk_text_iter_forward_word_end (end);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_SENTENCE_START:
|
||||
if (!gtk_text_iter_starts_sentence (start))
|
||||
gtk_text_iter_backward_sentence_start (start);
|
||||
if (gtk_text_iter_inside_sentence (end))
|
||||
gtk_text_iter_forward_sentence_end (end);
|
||||
while (!gtk_text_iter_starts_sentence (end))
|
||||
{
|
||||
if (!gtk_text_iter_forward_char (end))
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_SENTENCE_END:
|
||||
if (gtk_text_iter_inside_sentence (start) &&
|
||||
!gtk_text_iter_starts_sentence (start))
|
||||
gtk_text_iter_backward_sentence_start (start);
|
||||
while (!gtk_text_iter_ends_sentence (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
gtk_text_iter_forward_sentence_end (end);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_LINE_START:
|
||||
line_number = gtk_text_iter_get_line (start);
|
||||
if (line_number == 0)
|
||||
{
|
||||
gtk_text_buffer_get_iter_at_offset (buffer, start, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_text_iter_backward_line (start);
|
||||
gtk_text_iter_forward_line (start);
|
||||
}
|
||||
gtk_text_iter_forward_line (end);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_LINE_END:
|
||||
line_number = gtk_text_iter_get_line (start);
|
||||
if (line_number == 0)
|
||||
{
|
||||
gtk_text_buffer_get_iter_at_offset (buffer, start, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_text_iter_backward_line (start);
|
||||
gtk_text_iter_forward_line (start);
|
||||
}
|
||||
while (!gtk_text_iter_ends_line (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
gtk_text_iter_forward_to_line_end (end);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_gtk_text_buffer_get_text_after (GtkTextBuffer *buffer,
|
||||
AtkTextBoundary boundary_type,
|
||||
GtkTextIter *position,
|
||||
GtkTextIter *start,
|
||||
GtkTextIter *end)
|
||||
{
|
||||
*start = *position;
|
||||
*end = *start;
|
||||
|
||||
switch (boundary_type)
|
||||
{
|
||||
case ATK_TEXT_BOUNDARY_CHAR:
|
||||
gtk_text_iter_forward_char (start);
|
||||
gtk_text_iter_forward_chars (end, 2);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_WORD_START:
|
||||
if (gtk_text_iter_inside_word (end))
|
||||
gtk_text_iter_forward_word_end (end);
|
||||
while (!gtk_text_iter_starts_word (end))
|
||||
{
|
||||
if (!gtk_text_iter_forward_char (end))
|
||||
break;
|
||||
}
|
||||
*start = *end;
|
||||
if (!gtk_text_iter_is_end (end))
|
||||
{
|
||||
gtk_text_iter_forward_word_end (end);
|
||||
while (!gtk_text_iter_starts_word (end))
|
||||
{
|
||||
if (!gtk_text_iter_forward_char (end))
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_WORD_END:
|
||||
gtk_text_iter_forward_word_end (end);
|
||||
*start = *end;
|
||||
if (!gtk_text_iter_is_end (end))
|
||||
gtk_text_iter_forward_word_end (end);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_SENTENCE_START:
|
||||
if (gtk_text_iter_inside_sentence (end))
|
||||
gtk_text_iter_forward_sentence_end (end);
|
||||
while (!gtk_text_iter_starts_sentence (end))
|
||||
{
|
||||
if (!gtk_text_iter_forward_char (end))
|
||||
break;
|
||||
}
|
||||
*start = *end;
|
||||
if (!gtk_text_iter_is_end (end))
|
||||
{
|
||||
gtk_text_iter_forward_sentence_end (end);
|
||||
while (!gtk_text_iter_starts_sentence (end))
|
||||
{
|
||||
if (!gtk_text_iter_forward_char (end))
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_SENTENCE_END:
|
||||
gtk_text_iter_forward_sentence_end (end);
|
||||
*start = *end;
|
||||
if (!gtk_text_iter_is_end (end))
|
||||
gtk_text_iter_forward_sentence_end (end);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_LINE_START:
|
||||
gtk_text_iter_forward_line (end);
|
||||
*start = *end;
|
||||
gtk_text_iter_forward_line (end);
|
||||
break;
|
||||
|
||||
case ATK_TEXT_BOUNDARY_LINE_END:
|
||||
gtk_text_iter_forward_line (start);
|
||||
*end = *start;
|
||||
if (!gtk_text_iter_is_end (start))
|
||||
{
|
||||
while (!gtk_text_iter_ends_line (start))
|
||||
{
|
||||
if (!gtk_text_iter_backward_char (start))
|
||||
break;
|
||||
}
|
||||
gtk_text_iter_forward_to_line_end (end);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -389,6 +389,22 @@ const PangoLogAttr* _gtk_text_buffer_get_line_log_attrs (GtkTextBuffer *buff
|
||||
void _gtk_text_buffer_notify_will_remove_tag (GtkTextBuffer *buffer,
|
||||
GtkTextTag *tag);
|
||||
|
||||
void _gtk_text_buffer_get_text_before (GtkTextBuffer *buffer,
|
||||
AtkTextBoundary boundary_type,
|
||||
GtkTextIter *position,
|
||||
GtkTextIter *start,
|
||||
GtkTextIter *end);
|
||||
void _gtk_text_buffer_get_text_at (GtkTextBuffer *buffer,
|
||||
AtkTextBoundary boundary_type,
|
||||
GtkTextIter *position,
|
||||
GtkTextIter *start,
|
||||
GtkTextIter *end);
|
||||
void _gtk_text_buffer_get_text_after (GtkTextBuffer *buffer,
|
||||
AtkTextBoundary boundary_type,
|
||||
GtkTextIter *position,
|
||||
GtkTextIter *start,
|
||||
GtkTextIter *end);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user