From: Enlightenment S. <no-...@en...> - 2011-07-18 07:41:37
|
Log: Evas text: Fixed text_props_index_find and added props_cluster_next/prev. Author: tasn Date: 2011-07-18 00:41:27 -0700 (Mon, 18 Jul 2011) New Revision: 61469 Trac: http://trac.enlightenment.org/e/changeset/61469 Modified: trunk/evas/src/lib/engines/common/evas_text_utils.c trunk/evas/src/lib/engines/common/evas_text_utils.h Modified: trunk/evas/src/lib/engines/common/evas_text_utils.c =================================================================== --- trunk/evas/src/lib/engines/common/evas_text_utils.c 2011-07-18 07:41:21 UTC (rev 61468) +++ trunk/evas/src/lib/engines/common/evas_text_utils.c 2011-07-18 07:41:27 UTC (rev 61469) @@ -65,11 +65,12 @@ } } -EAPI int -evas_common_text_props_cluster_next(const Evas_Text_Props *props, int pos) +static int +_evas_common_text_props_cluster_move(const Evas_Text_Props *props, int pos, + Eina_Bool right) { int prop_pos = evas_common_text_props_index_find(props, pos); - if ((props->bidi.dir == EVAS_BIDI_DIRECTION_RTL) && (prop_pos > 0)) + if (!right && (prop_pos > 0)) { #ifdef OT_SUPPORT return props->info->ot[props->start + prop_pos - 1].source_cluster - @@ -78,8 +79,7 @@ return props->start + prop_pos - 1 - props->text_offset; #endif } - else if ((props->bidi.dir != EVAS_BIDI_DIRECTION_RTL) && - (prop_pos < (int) (props->len - 1))) + else if (right && (prop_pos < (int) (props->len - 1))) { #ifdef OT_SUPPORT return props->info->ot[props->start + prop_pos + 1].source_cluster - @@ -92,6 +92,24 @@ return pos; } +EAPI int +evas_common_text_props_cluster_next(const Evas_Text_Props *props, int pos) +{ + Eina_Bool right; + /* Move right if we are in a non-rtl text */ + right = (props->bidi.dir != EVAS_BIDI_DIRECTION_RTL); + return _evas_common_text_props_cluster_move(props, pos, right); +} + +EAPI int +evas_common_text_props_cluster_prev(const Evas_Text_Props *props, int pos) +{ + Eina_Bool right; + /* Move right if we are in an rtl text */ + right = (props->bidi.dir == EVAS_BIDI_DIRECTION_RTL); + return _evas_common_text_props_cluster_move(props, pos, right); +} + /* Returns the index of the logical char in the props. */ EAPI int evas_common_text_props_index_find(const Evas_Text_Props *props, int _cutoff) @@ -156,7 +174,7 @@ if (ot_info->source_cluster != (size_t) _cutoff) break; } - mid = props->len - mid; + mid--; } else { @@ -189,7 +207,7 @@ #ifdef OT_SUPPORT _cutoff = evas_common_text_props_index_find(base, _cutoff); - if (_cutoff > 0) + if (_cutoff >= 0) { cutoff = (size_t) _cutoff; } @@ -206,9 +224,9 @@ if (base->bidi.dir == EVAS_BIDI_DIRECTION_RTL) { ext->start = base->start; - ext->len = base->len - cutoff; - base->start = (base->start + base->len) - cutoff; - base->len = cutoff; + ext->len = cutoff + 1; + base->start = base->start + ext->len; + base->len = base->len - ext->len; #ifdef OT_SUPPORT ext->text_offset = Modified: trunk/evas/src/lib/engines/common/evas_text_utils.h =================================================================== --- trunk/evas/src/lib/engines/common/evas_text_utils.h 2011-07-18 07:41:21 UTC (rev 61468) +++ trunk/evas/src/lib/engines/common/evas_text_utils.h 2011-07-18 07:41:27 UTC (rev 61469) @@ -75,6 +75,9 @@ evas_common_text_props_cluster_next(const Evas_Text_Props *props, int pos); EAPI int +evas_common_text_props_cluster_prev(const Evas_Text_Props *props, int pos); + +EAPI int evas_common_text_props_index_find(const Evas_Text_Props *props, int _cutoff); EAPI void |