summaryrefslogtreecommitdiff
path: root/fribidi_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'fribidi_utils.c')
-rw-r--r--fribidi_utils.c54
1 files changed, 34 insertions, 20 deletions
diff --git a/fribidi_utils.c b/fribidi_utils.c
index cc98708..d2d0f54 100644
--- a/fribidi_utils.c
+++ b/fribidi_utils.c
@@ -61,10 +61,12 @@
* &num_vis_ranges, *vis_ranges);
**----------------------------------------------------------------------*/
void
-fribidi_map_range (FriBidiStrIndex in_span[2], /* Start and end span */
+fribidi_map_range (FriBidiEnv* fribidienv,
+ /* input */
+ FriBidiStrIndex in_span[2], /* Start and end span */
FriBidiStrIndex len, boolean is_v2l_map, /* Needed for embedding_level */
- FriBidiStrIndex *position_map,
- FriBidiLevel *embedding_level_list,
+ const FriBidiStrIndex *position_map,
+ const FriBidiLevel *embedding_level_list,
/* output */
int *num_mapped_spans, FriBidiStrIndex mapped_spans[63][2])
{
@@ -111,9 +113,11 @@ fribidi_map_range (FriBidiStrIndex in_span[2], /* Start and end span */
* length of the section in the new string that needs redrawing.
*----------------------------------------------------------------------*/
void
-fribidi_find_string_changes ( /* input */
- FriBidiChar *old_str,
- FriBidiStrIndex old_len, FriBidiChar *new_str,
+fribidi_find_string_changes ( FriBidiEnv* fribidienv,
+ /* input */
+ const FriBidiChar *old_str,
+ FriBidiStrIndex old_len,
+ const FriBidiChar *new_str,
FriBidiStrIndex new_len,
/* output */
FriBidiStrIndex *change_start,
@@ -189,10 +193,13 @@ fribidi_find_string_changes ( /* input */
*
*----------------------------------------------------------------------*/
void
-fribidi_xpos_resolve (int x_pos, int x_offset, FriBidiStrIndex len,
- FriBidiLevel *embedding_level_list,
+fribidi_xpos_resolve (FriBidiEnv* fribidienv,
+ /* input */
+ int x_pos, int x_offset, FriBidiStrIndex len,
+ const FriBidiLevel *embedding_level_list,
FriBidiCharType base_dir,
- FriBidiStrIndex *vis2log, int *char_widths,
+ const FriBidiStrIndex *vis2log,
+ const int *char_widths,
/* output */
FriBidiStrIndex *res_log_pos,
FriBidiStrIndex *res_vis_pos,
@@ -231,7 +238,8 @@ fribidi_xpos_resolve (int x_pos, int x_offset, FriBidiStrIndex len,
{
/* Found position */
*res_cursor_dir_is_rtl =
- fribidi_is_char_rtl (embedding_level_list, base_dir, log_pos);
+ fribidi_is_char_rtl (fribidienv,
+ embedding_level_list, base_dir, log_pos);
/* Are we in the left hand side of the clicked character? */
if (x_pos - (x_offset + char_width_sum + char_width / 2) < 0)
{
@@ -295,7 +303,8 @@ fribidi_xpos_resolve (int x_pos, int x_offset, FriBidiStrIndex len,
* if the embedding level for the character is odd.
*----------------------------------------------------------------------*/
boolean
-fribidi_is_char_rtl (FriBidiLevel *embedding_level_list,
+fribidi_is_char_rtl (FriBidiEnv* fribidienv,
+ const FriBidiLevel *embedding_level_list,
FriBidiCharType base_dir, FriBidiStrIndex idx)
{
if (!embedding_level_list || idx < 0)
@@ -311,16 +320,20 @@ fribidi_is_char_rtl (FriBidiLevel *embedding_level_list,
* the same attributes.
*----------------------------------------------------------------------*/
void
-fribidi_runs_log2vis ( /* input */
- FriBidiList *logical_runs, /* List of FriBidiRunType */
- FriBidiStrIndex len, FriBidiStrIndex *log2vis, FriBidiCharType base_dir, /* TBD: remove it, not needed */
+fribidi_runs_log2vis ( FriBidiEnv* fribidienv,
+ /* input */
+ const FriBidiList *logical_runs, /* List of FriBidiRunType */
+ FriBidiStrIndex len,
+ const FriBidiStrIndex *log2vis,
+ FriBidiCharType base_dir, /* TBD: remove it, not needed */
/* output */
FriBidiList **visual_runs)
{
- void **visual_attribs = (void **) malloc (sizeof (void *) * len);
+ void **visual_attribs = (void **) fribidi_malloc (fribidienv, sizeof (void *) * len);
void *current_attrib;
FriBidiStrIndex pos, i;
- FriBidiList *list, *last;
+ const FriBidiList *list;
+ FriBidiList *last;
FriBidiStrIndex current_idx;
@@ -349,17 +362,18 @@ fribidi_runs_log2vis ( /* input */
if (i == len || current_attrib != visual_attribs[i])
{
FriBidiRunType *run =
- (FriBidiRunType *) malloc (sizeof (FriBidiRunType));
+ (FriBidiRunType *) fribidi_malloc (fribidienv, sizeof (FriBidiRunType));
run->length = i - current_idx;
run->attribute = current_attrib;
/* Keeping track of the last node is crucial for efficiency
for long lists... */
if (last == NULL)
- last = *visual_runs = fribidi_list_append (NULL, run);
+ last = *visual_runs = fribidi_list_append (fribidienv,
+ NULL, run);
else
{
- fribidi_list_append (last, run);
+ fribidi_list_append (fribidienv, last, run);
last = last->next;
}
if (i == len)
@@ -369,5 +383,5 @@ fribidi_runs_log2vis ( /* input */
current_idx = i;
}
}
- free (visual_attribs);
+ fribidi_free (fribidienv, visual_attribs);
}