fribidi_reorder_line man page

fribidi_reorder_line — reorder a line of logical string to visual


#include <fribidi.h>

extern FriBidiLevel fribidi_reorder_line
FriBidiFlags flags,
const FriBidiCharType *bidi_types,
const FriBidiStrIndex len,
const FriBidiStrIndex off,
const FriBidiParType base_dir,
FriBidiLevel *embedding_levels,
FriBidiChar *visual_str,
FriBidiStrIndex *map


FriBidiFlags flags

Reorder flags.

const FriBidiCharType *bidi_types

Input list of bidi types as returned by fribidi_get_bidi_types().

Since there are 23 possible values for a const FriBidiCharType, they are not all listed here.

const FriBidiStrIndex len

Input length of the line.

const FriBidiStrIndex off

Input offset of the beginning of the line in the paragraph.

const FriBidiParType base_dir

Resolved paragraph base direction.

Possible values for a const FriBidiParType are as follows:


Left-To-Right paragraph.


Right-To-Left paragraph.


DirectiOn-Neutral paragraph.


Weak Left To Right paragraph.


Weak Right To Left paragraph.

FriBidiLevel *embedding_levels

Input list of embedding levels, as returned by fribidi_get_par_embedding_levels.

FriBidiChar *visual_str

Visual string to reorder.

FriBidiStrIndex *map

A map of string indices which is reordered to reflect where each glyph ends up.


This function reorders the characters in a line of text from logical to final visual order.  This function implements part 4 of rule L1, and rules L2 and L3 of the Unicode Bidirectional Algorithm available at

As a side effect it also sets position maps if not NULL.

You should provide the resolved paragraph direction and embedding levels as set by fribidi_get_par_embedding_levels().  Also note that the embedding levels may change a bit.  To be exact, the embedding level of any sequence of white space at the end of line is reset to the paragraph embedding level (That is part 4 of rule L1).

Note that the bidi types and embedding levels are not reordered.  You can reorder these (or any other) arrays using the map later.  The user is responsible to initialize map to something sensible, like an identity mapping, or pass NULL if no map is needed.

There is an optional part to this function, which is whether non-spacing marks for right-to-left parts of the text should be reordered to come after their base characters in the visual string or not.  Most rendering engines expect this behavior, but console-based systems for example do not like it. This is controlled by the FRIBIDI_FLAG_REORDER_NSM flag.  The flag is on in FRIBIDI_FLAGS_DEFAULT.


Maximum level found in this line plus one, or zero if any error occurred (memory allocation failure most probably).

See Also

fribidi_shape_arabic(3), fribidi_get_par_direction(3), fribidi_get_par_embedding_levels_ex(3), fribidi_get_bidi_type(3), fribidi_get_bidi_types(3), fribidi_get_bidi_type_name(3), fribidi_debug_status(3), fribidi_set_debug(3), fribidi_charset_to_unicode(3), fribidi_unicode_to_charset(3), fribidi_parse_charset(3), fribidi_mirroring_status(3), fribidi_set_mirroring(3), fribidi_reorder_nsm_status(3), fribidi_set_reorder_nsm(3), fribidi_log2vis_get_embedding_levels(3), fribidi_get_type(3), fribidi_get_type_internal(3), fribidi_remove_bidi_marks(3), fribidi_log2vis(3), fribidi_get_par_embedding_levels(3), fribidi_join_arabic(3), fribidi_get_joining_type(3), fribidi_get_joining_types(3), fribidi_get_joining_type_name(3), fribidi_get_mirror_char(3), fribidi_shape_mirroring(3), fribidi_get_bracket(3), fribidi_get_bracket_types(3), fribidi_shape(3)

Referenced By

fribidi_charset_to_unicode(3), fribidi_debug_status(3), fribidi_get_bidi_type(3), fribidi_get_bidi_type_name(3), fribidi_get_bidi_types(3), fribidi_get_bracket(3), fribidi_get_bracket_types(3), fribidi_get_joining_type(3), fribidi_get_joining_type_name(3), fribidi_get_joining_types(3), fribidi_get_mirror_char(3), fribidi_get_par_direction(3), fribidi_get_par_embedding_levels(3), fribidi_get_par_embedding_levels_ex(3), fribidi_get_type(3), fribidi_get_type_internal(3), fribidi_join_arabic(3), fribidi_log2vis(3), fribidi_log2vis_get_embedding_levels(3), fribidi_mirroring_status(3), fribidi_parse_charset(3), fribidi_remove_bidi_marks(3), fribidi_reorder_nsm_status(3), fribidi_set_debug(3), fribidi_set_mirroring(3), fribidi_set_reorder_nsm(3), fribidi_shape(3), fribidi_shape_arabic(3), fribidi_shape_mirroring(3), fribidi_unicode_to_charset(3).

19 February 2018 c2man fribidi-bidi.h Programmer's Manual