Unicode bidirectional class
ID: unicode-bidirectional-class
A Unicode bidirectional class is a character property, formally named
Bidi_Class, used as input to the Unicode Bidirectional Algorithm. It classifies directional behavior; the algorithm combines the properties with context to compute bidirectional embedding levels. A class is not itself a final screen position.[ref]Unicode Bidirectional Algorithm (Revision 51) by the Unicode Consortium. definitionBD1 and section3.2, Table4: bidirectional character types
For a compact example, Latin A (
U+0041) has classL, Hebrew alef (U+05D0) has classR, digit1 (U+0031) has classEN, and ordinary space (U+0020) has classWS. These labels distinguish strong directions, a numeric class and whitespace. They carry information that a single left-to-right/right-to-left Boolean would lose.An original data-structure example keeps the stages separate. Represent each stored item by a record containing its logical index, code point, original
Bidi_Class, working directional type, resolved level and eventual visual index. A direction-resolution step can update the working fields while leaving the stored code point and original property intact. A later level-based reordering of bidirectional text step changes position mappings rather than assigning new code points.The advantage appears in debugging a digit within mixed-direction text. Its original classEN identifies a numeric input. Its resolved level describes the computed directional context, and its visual index identifies a placement in one line. Reporting only the visual index would conceal whether a mistake arose during classification, context resolution or final reordering.
The normative property data are supplied by the Unicode character database; broad descriptions such as “a letter in this script” have exceptions. An implementation should use the data for its chosen Unicode version rather than infer every character's class from appearance.[ref]
Unicode Bidirectional Algorithm (Revision 51) by the Unicode Consortium. section3.2: normative character data, exceptions and version-sensitive assignments
New to topics? Read the docs here!