Class BidiTransform

java.lang.Object
com.ibm.icu.text.BidiTransform

public class BidiTransform extends Object
Bidi Layout Transformation Engine.
  • Field Details

    • bidi

      private Bidi bidi
    • text

      private String text
    • reorderingOptions

      private int reorderingOptions
    • shapingOptions

      private int shapingOptions
  • Constructor Details

    • BidiTransform

      public BidiTransform()
      BidiTransform default constructor.
  • Method Details

    • transform

      public String transform(CharSequence text, byte inParaLevel, BidiTransform.Order inOrder, byte outParaLevel, BidiTransform.Order outOrder, BidiTransform.Mirroring doMirroring, int shapingOptions)
      Performs transformation of text from the bidi layout defined by the input ordering scheme to the bidi layout defined by the output ordering scheme, and applies character mirroring and Arabic shaping operations.

      In terms of Bidi class, such a transformation implies:

      An "ordering scheme" encompasses the base direction and the order of text, and these characteristics must be defined by the caller for both input and output explicitly .

      There are 36 possible combinations of {input, output} ordering schemes, which are partially supported by Bidi already. Examples of the currently supported combinations:

      All combinations that involve the Visual RTL scheme are unsupported by Bidi, for instance:

      • {Logical LTR, Visual RTL},
      • {Visual RTL, Logical RTL}.

      Example of usage of the transformation engine:

       BidiTransform bidiTransform = new BidiTransform();
       String in = "abc ۰123"; // "abc \\u06f0123"
       // Run a transformation.
       String out = bidiTransform.transform(in,
                Bidi.LTR, Order.VISUAL,
                Bidi.RTL, Order.LOGICAL,
                Mirroring.OFF,
                ArabicShaping.DIGITS_AN2EN | ArabicShaping.DIGIT_TYPE_AN_EXTENDED);
       // Result: "0123 abc".
       // Do something with out.
       out = out.replace('0', '4');
       // Result: "4123 abc".
       // Run a reverse transformation.
       String inNew = bidiTransform.transform(out,
                Bidi.RTL, Order.LOGICAL,
                Bidi.LTR, Order.VISUAL,
                Mirroring.OFF,
                ArabicShaping.DIGITS_EN2AN | ArabicShaping.DIGIT_TYPE_AN_EXTENDED);
       // Result: "abc \\u06f4\\u06f1\\u06f2\\u06f3"
       
      Parameters:
      text - An input character sequence that the Bidi layout transformations will be performed on.
      inParaLevel - A base embedding level of the input as defined in Bidi.setPara(String, byte, byte[]) documentation for the paraLevel parameter.
      inOrder - An order of the input, which can be one of the BidiTransform.Order values.
      outParaLevel - A base embedding level of the output as defined in Bidi.setPara(String, byte, byte[]) documentation for the paraLevel parameter.
      outOrder - An order of the output, which can be one of the BidiTransform.Order values.
      doMirroring - Indicates whether or not to perform character mirroring, and can accept one of the BidiTransform.Mirroring values.
      shapingOptions - Arabic digit and letter shaping options defined in the ArabicShaping documentation.

      Note: Direction indicator options are computed by the transformation engine based on the effective ordering schemes, so user-defined direction indicators will be ignored.

      Returns:
      The output string, which is the result of the layout transformation.
      Throws:
      IllegalArgumentException - if text, inOrder, outOrder, or doMirroring parameter is null.
    • resolveBaseDirection

      private void resolveBaseDirection(byte[] levels)
      When the direction option is Bidi.LEVEL_DEFAULT_LTR or Bidi.LEVEL_DEFAULT_RTL, resolves the base direction according to that of the first strong directional character in the text.
      Parameters:
      levels - Byte array, where levels[0] is an input level levels[1] is an output level. Resolved levels override these.
    • findMatchingScheme

      private BidiTransform.ReorderingScheme findMatchingScheme(byte inLevel, BidiTransform.Order inOrder, byte outLevel, BidiTransform.Order outOrder)
      Finds a valid BidiTransform.ReorderingScheme matching the caller-defined scheme.
      Returns:
      A valid ReorderingScheme object or null
    • resolve

      private void resolve(byte level, int options)
      Performs bidi resolution of text.
      Parameters:
      level - Base embedding level
      options - Reordering options
    • reorder

      private void reorder()
      Performs basic reordering of text (Logical LTR or RTL to Visual LTR).
    • reverse

      private void reverse()
      Performs string reverse.
    • mirror

      private void mirror()
      Performs character mirroring without reordering. When this method is called, text should be in a Logical form.
    • shapeArabic

      private void shapeArabic(int digitsDir, int lettersDir)
      Performs digit and letter shaping
      Parameters:
      digitsDir - Digit shaping option that indicates whether the text should be treated as logical or visual.
      lettersDir - Letter shaping option that indicates whether the text should be treated as logical or visual form (can mismatch the digit option).
    • shapeArabic

      private void shapeArabic(int options)
      Performs digit and letter shaping
      Parameters:
      options - Shaping options covering both letters and digits
    • IsLTR

      private static boolean IsLTR(byte level)
      Is level LTR? convenience method
      Parameters:
      level - Embedding level
    • IsRTL

      private static boolean IsRTL(byte level)
      Is level RTL? convenience method
      Parameters:
      level - Embedding level
    • IsLogical

      private static boolean IsLogical(BidiTransform.Order order)
      Is order logical? convenience method
      Parameters:
      level - Order value
    • IsVisual

      private static boolean IsVisual(BidiTransform.Order order)
      Is order visual? convenience method
      Parameters:
      level - Order value