---
name: "fribidi_join_arabic"
section: "3"
platform: "linux"
package: "fribidi"
version: "1.0.18-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/fribidi_join_arabic"
---

# fribidi\_join\_arabic(3)

do Arabic joining

## NAME

fribidi\_join\_arabic - do Arabic joining

## SYNOPSIS

**#include \<../fribidi/lib/fribidi.h\>**

**void fribidi\_join\_arabic**\
 **(**\
\
 	**const FriBidiCharType \*bidi\_types,**\
\
 	**const FriBidiStrIndex len,**\
\
 	**const FriBidiLevel \*embedding\_levels,**\
\
 	**FriBidiArabicProp \*ar\_props**\
 **);**

## PARAMETERS

- **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 string length.

- **const FriBidiLevel \*embedding\_levels**

  Input list of embedding levels, as returned by fribidi\_get\_par\_embedding\_levels.

- **FriBidiArabicProp \*ar\_props**

  Arabic properties to analyze, initialized by joining types, as returned by fribidi\_get\_joining\_types.

## DESCRIPTION

This function does the Arabic joining algorithm.  Means, given Arabic joining types of the characters in ar\_props (don't worry, FriBidiJoiningType can be casted to FriBidiArabicProp automagically), this function modifies this properties to grasp the effect of neighboring characters.  You probably need this information later to do Arabic shaping.

This function implements rules R1 to R7 inclusive (all rules) of the Arabic Cursive Joining algorithm of the Unicode standard as available at http://www.unicode.org/versions/Unicode4.0.0/ch08.pdf#G7462.  It also interacts correctly with the bidirection algorithm as defined in Section\
 3\.5 Shaping of the Unicode Bidirectional Algorithm available at http://www.unicode.org/reports/tr9/#Shaping.

There are a few macros defined in fribidi-joining-types.h for querying the Arabic properties computed by this function.

## SEE ALSO

[fribidi\_shape\_arabic(3)](/fribidi_shape_arabic/3.md), [fribidi\_get\_par\_direction(3)](/fribidi_get_par_direction/3.md), [fribidi\_get\_par\_embedding\_levels\_ex(3)](/fribidi_get_par_embedding_levels_ex/3.md), [fribidi\_reorder\_line(3)](/fribidi_reorder_line/3.md), [fribidi\_get\_bidi\_type(3)](/fribidi_get_bidi_type/3.md), [fribidi\_get\_bidi\_types(3)](/fribidi_get_bidi_types/3.md), [fribidi\_get\_bidi\_type\_name(3)](/fribidi_get_bidi_type_name/3.md), [fribidi\_charset\_to\_unicode(3)](/fribidi_charset_to_unicode/3.md), [fribidi\_unicode\_to\_charset(3)](/fribidi_unicode_to_charset/3.md), [fribidi\_parse\_charset(3)](/fribidi_parse_charset/3.md), [fribidi\_debug\_status(3)](/fribidi_debug_status/3.md), [fribidi\_set\_debug(3)](/fribidi_set_debug/3.md), [fribidi\_mirroring\_status(3)](/fribidi_mirroring_status/3.md), [fribidi\_set\_mirroring(3)](/fribidi_set_mirroring/3.md), [fribidi\_reorder\_nsm\_status(3)](/fribidi_reorder_nsm_status/3.md), [fribidi\_set\_reorder\_nsm(3)](/fribidi_set_reorder_nsm/3.md), [fribidi\_log2vis\_get\_embedding\_levels(3)](/fribidi_log2vis_get_embedding_levels/3.md), [fribidi\_get\_type(3)](/fribidi_get_type/3.md), [fribidi\_get\_type\_internal(3)](/fribidi_get_type_internal/3.md), [fribidi\_get\_par\_embedding\_levels(3)](/fribidi_get_par_embedding_levels/3.md), [fribidi\_get\_joining\_type(3)](/fribidi_get_joining_type/3.md), [fribidi\_get\_joining\_types(3)](/fribidi_get_joining_types/3.md), [fribidi\_get\_joining\_type\_name(3)](/fribidi_get_joining_type_name/3.md), [fribidi\_get\_mirror\_char(3)](/fribidi_get_mirror_char/3.md), [fribidi\_shape\_mirroring(3)](/fribidi_shape_mirroring/3.md), [fribidi\_get\_bracket(3)](/fribidi_get_bracket/3.md), [fribidi\_get\_bracket\_types(3)](/fribidi_get_bracket_types/3.md), [fribidi\_shape(3)](/fribidi_shape/3.md), [fribidi\_remove\_bidi\_marks(3)](/fribidi_remove_bidi_marks/3.md), [fribidi\_log2vis(3)](/fribidi_log2vis/3.md)
