fribidi_join_arabic(3)
π NAME π
okay bestie, welcome to the FriBidi Programmer's Manual page for fribidi_join_arabic(3) β this is the one that does Arabic joining. no cap, it's lowkey iconic β¨
π¦ 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β the input list of bidi types, exactly as returned byfribidi_get_bidi_types(). Also, real talk: there are 23 possible values for aconst FriBidiCharType, so they are not all listed here. iykyk πconst FriBidiStrIndex lenβ the input string length.const FriBidiLevel *embedding_levelsβ the input list of embedding levels, as returned byfribidi_get_par_embedding_levels.FriBidiArabicProp *ar_propsβ the Arabic properties to analyze, initialized by joining types, as returned byfribidi_get_joining_types.
β¨ DESCRIPTION β¨
so this function does the Arabic joining algorithm. meaning: you give it the Arabic joining types of the characters in ar_props β and don't worry, FriBidiJoiningType can be casted to FriBidiArabicProp automagically β and it modifies those properties to grasp the effect of neighboring characters. you probably need this information later to do Arabic shaping, bestie π«Ά
it implements rules R1 to R7 inclusive β yes, all the rules β of the Arabic Cursive Joining algorithm of the Unicode standard, 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. the way that's literally doing the most for Unicode correctness ππ
also, there are a few macros defined in fribidi-joining-types.h for querying the Arabic properties computed by this function. go off, little macros π
π SEE ALSO π
go bother these icons too:
fribidi_shape_arabic(3)fribidi_get_par_direction(3)fribidi_get_par_embedding_levels_ex(3)fribidi_reorder_line(3)fribidi_get_bidi_type(3)fribidi_get_bidi_types(3)fribidi_get_bidi_type_name(3)fribidi_charset_to_unicode(3)fribidi_unicode_to_charset(3)fribidi_parse_charset(3)fribidi_debug_status(3)fribidi_set_debug(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_get_par_embedding_levels(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)fribidi_remove_bidi_marks(3)fribidi_log2vis(3)
and that's the page, bestie π this lil manpage says it came from c2man + fribidi-joining.h, dated 29 October 2026, and it's serving fribidi_join_arabic(3) realness to the very end πβ¨
π¦ where this page comes from
- arch rolling: fribidi 1.0.18-1 Β· LGPL-2.1-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms