new_it->source_pos = pit->source_pos + index;
new_it->bidi_props.start = new_it->source_pos;
new_it->bidi_props.props = &new_it->source_node->bidi_props;
+# ifdef BIDI_SUPPORT
+ evas_bidi_shape_string(new_it->text, &new_it->bidi_props,
+ eina_unicode_strlen(new_it->text));
+# endif
_layout_item_text_cutoff(c, pit, index);
_layout_strip_trailing_whitespace(c, pit->format, pit);
break;
it->source_pos = start + str - tbase;
it->bidi_props.start = it->source_pos;
it->bidi_props.props = &it->source_node->bidi_props;
+# ifdef BIDI_SUPPORT
+ evas_bidi_shape_string(it->text, &it->bidi_props,
+ eina_unicode_strlen(it->text));
+# endif
tw = th = 0;
if (fmt->font.font)
c->ENFN->font_string_size_get(c->ENDT, fmt->font.font, it->text, &it->bidi_props, &tw, &th);
if (fnode && (fnode->text_node == cur->node))
fnode->offset += len;
#ifdef BIDI_SUPPORT
+ /* Reset paragraph direction */
+ n->bidi_props.direction = FRIBIDI_PAR_ON;
evas_bidi_update_props(eina_ustrbuf_string_get(n->unicode), &n->bidi_props);
#endif
_evas_textblock_changed(o, cur->obj);
Evas_Object_Textblock *o;
Evas_Object_Textblock_Node_Text *n1, *n2, *n;
Evas_Object_Textblock_Node_Format *fnode = NULL;
- /*FIXME: Update cursors */
if (!cur1 || !cur1->node) return;
if (!cur2 || !cur2->node) return;
Eina_Bool
evas_bidi_shape_string(Eina_Unicode *ustr, const Evas_BiDi_Props *bidi_props, size_t len)
{
+ if (!EVAS_BIDI_IS_BIDI_PROP(bidi_props->props))
+ return EINA_FALSE;
+
EvasBiDiJoiningType *join_types = NULL;
join_types = (EvasBiDiJoiningType *) malloc(sizeof(EvasBiDiJoiningType) * len);
if (!join_types)
}
fribidi_get_joining_types(ustr, len, join_types);
- fribidi_join_arabic(bidi_props->props->char_types, len, bidi_props->props->embedding_levels + bidi_props->start, join_types);
+ fribidi_join_arabic(bidi_props->props->char_types + bidi_props->start, len, bidi_props->props->embedding_levels + bidi_props->start, join_types);
/* Actually modify the string */