Raku Land





use Text::FriBidi::Line; use Test; plan 1; enum ( :Shin<ש>, :Resh<ר>, :He<ה> ); my $text = "Sarah ({Shin~Resh~He})"; $line .= new: :$text; my $visual = $line.Str; is-deeply $visual, "Sarah ({He~Resh~Shin})";


The Unicode standard calls for characters to be ordered 'logically', i.e. in the sequence they are intended to be interpreted, as opposed to 'visually', the sequence they appear.

The Unicode® Bidirectional Algorithm (BiDi Algorithm) is then used to reorder for visual display.

This algorithm primarily based on character detection, but also uses special BiDi control characters available for manual control.

FriBidi is a library that implements the Unicode BiDi algorithm to reorder text for visual display. This module provides Raku bindings to FriBidi.

Text::FriBidi::Line Methods


use Text::FriBidi::Defs :FriBidiType, :FriBidiFlag; method new( Str:D :$text!, # text, in logical order UInt:D :$direction = FRIBIDI_TYPE_LTR, # default direction UInt:D :$flags = FRIBIDI_FLAGS_DEFAULT +| FRIBIDI_FLAGS_ARABIC, )

:$text option

Input text, in logical reading/processing order. Possibly including Unicode BiDi control characters.

:$flags option

A set of 'ored` flag, including:

:$direction option

Base text direction; one of:


The string, after applying any mirroring, shaping and directional ordering and with BiDi control characters removed (by default).


Please install the libfribidi-dev package prior to installing this module.

See Also