home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 144 / DPCS0200.iso / Internet / Supanet / system / swing.jar / javax / swing / text / Bidi.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-11-05  |  21.9 KB  |  715 lines

  1. package javax.swing.text;
  2.  
  3. final class Bidi {
  4.    private boolean ltr;
  5.    private byte[] dirs;
  6.    private byte[] levels;
  7.    private int[] l2vMap;
  8.    private int[] v2lMap;
  9.    // $FF: renamed from: L byte
  10.    static final byte field_0 = 0;
  11.    // $FF: renamed from: R byte
  12.    static final byte field_1 = 1;
  13.    // $FF: renamed from: EN byte
  14.    static final byte field_2 = 2;
  15.    // $FF: renamed from: ES byte
  16.    static final byte field_3 = 3;
  17.    // $FF: renamed from: ET byte
  18.    static final byte field_4 = 4;
  19.    // $FF: renamed from: AN byte
  20.    static final byte field_5 = 5;
  21.    // $FF: renamed from: CS byte
  22.    static final byte field_6 = 6;
  23.    // $FF: renamed from: B byte
  24.    static final byte field_7 = 7;
  25.    // $FF: renamed from: S byte
  26.    static final byte field_8 = 8;
  27.    // $FF: renamed from: WS byte
  28.    static final byte field_9 = 9;
  29.    // $FF: renamed from: ON byte
  30.    static final byte field_10 = 10;
  31.    // $FF: renamed from: AR byte
  32.    static final byte field_11 = 11;
  33.    static final char LRM = '\u200e';
  34.    static final char RLM = '\u200f';
  35.    static final char LRE = '\u202a';
  36.    static final char RLE = '\u202b';
  37.    static final char PDF = '\u202c';
  38.    static final char LRO = '\u202d';
  39.    static final char RLO = '\u202e';
  40.    static final char NUMLEVELS = '\u0010';
  41.    static final boolean[] neutral = new boolean[]{false, false, false, false, false, false, false, true, true, true, true, false};
  42.    static final boolean[] strongDirection = new boolean[]{true, true, false, false, false, false, false, false, false, false, false, true};
  43.    static final boolean[] strongDirectionOrB = new boolean[]{true, true, false, false, false, false, false, true, false, false, false, true};
  44.    private static byte[] dirIndices = new byte[]{14, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, -124, 14, 18, 15, 16, 17, 18, 19, 20, 21, 22, 23, 14, 24, 25, 26, 27, 14, 28, 29, 30, -104, 14, 11, 2, 31, 32, 33, 34, 35, 36, 37, 38, 14, 39, -103, 14, 8, 40, 41, 42, 43, 44, 45, 46, 47, -76, 14, -2, 2, -91, 2, 1, 48, -104, 14, -41, 2, 1, 49, -60, 2, 12, 50, 14, 51, 52, 53, 53, 54, 55, 56, 57, 58, 59};
  45.    private static byte[] dirValues = new byte[]{-119, 10, 1, 8, -106, 10, 3, 9, 10, 10, -125, 4, -123, 10, 5, 4, 6, 4, 6, 3, -118, 2, 1, 6, -122, 10, -102, 0, -122, 10, -102, 0, -91, 10, 2, 9, 10, -124, 4, -118, 10, 4, 4, 4, 2, 2, -123, 10, 1, 2, -122, 10, -105, 0, 1, 10, -97, 0, 1, 10, -2, 0, -2, 0, 2, 0, 0, -124, 10, -98, 0, -72, 10, -39, 0, -121, 10, -81, 0, 1, 10, -118, 0, -106, 10, -58, 0, -102, 10, 2, 0, 0, -110, 10, 2, 0, 0, -124, 10, 1, 0, -125, 10, 1, 0, -123, 10, -121, 0, 3, 10, 0, 10, -108, 0, 1, 10, -84, 0, 1, 10, -121, 0, -125, 10, 8, 0, 10, 0, 10, 0, 10, 0, 10, -110, 0, -115, 10, -116, 0, 1, 10, -62, 0, 1, 10, -116, 0, 1, 10, -87, 0, -119, 10, -75, 0, 8, 10, 10, 0, 0, 10, 10, 0, 0, -125, 10, -100, 0, 2, 10, 10, -120, 0, 4, 10, 10, 0, 0, -73, 10, -90, 0, 2, 10, 10, -121, 0, 1, 10, -89, 0, 2, 10, 0, -121, 10, -111, 1, 1, 10, -105, 1, 1, 10, -118, 1, -117, 10, -101, 1, -123, 10, -123, 1, -105, 10, 1, 11, -114, 10, 1, 11, -125, 10, 2, 11, 10, -102, 11, -123, 10, -109, 11, -115, 10, -118, 5, 6, 4, 5, 5, 11, 10, 10, -56, 11, 2, 10, 10, -123, 11, 1, 10, -113, 11, 1, 10, -98, 11, 2, 10, 10, -118, 2, -2, 10, -119, 10, -125, 0, 1, 10, -75, 0, 2, 10, 10, -110, 0, 2, 10, 10, -123, 0, -125, 10, -103, 0, -112, 10, -125, 0, 1, 10, -120, 0, 6, 10, 10, 0, 0, 10, 10, -106, 0, 1, 10, -121, 0, 2, 10, 0, -125, 10, -124, 0, 4, 10, 10, 0, 10, -121, 0, 6, 10, 10, 0, 0, 10, 10, -125, 0, -119, 10, 1, 0, -124, 10, 3, 0, 0, 10, -123, 0, 2, 10, 10, -107, 0, -121, 10, 3, 0, 10, 10, -122, 0, -124, 10, 4, 0, 0, 10, 10, -106, 0, 1, 10, -121, 0, 13, 10, 0, 0, 10, 0, 0, 10, 0, 0, 10, 10, 0, 10, -123, 0, -124, 10, 4, 0, 0, 10, 10, -125, 0, -117, 10, -124, 0, 2, 10, 0, -121, 10, -113, 0, -116, 10, -125, 0, 1, 10, -121, 0, 3, 10, 0, 10, -125, 0, 1, 10, -106, 0, 1, 10, -121, 0, 4, 10, 0, 0, 10, -123, 0, 2, 10, 10, -118, 0, 1, 10, -125, 0, 1, 10, -125, 0, 3, 10, 10, 0, -113, 10, 1, 0, -123, 10, -118, 0, -111, 10, -125, 0, 1, 10, -120, 0, 6, 10, 10, 0, 0, 10, 10, -106, 0, 1, 10, -121, 0, 5, 10, 0, 0, 10, 10, -124, 0, 2, 10, 10, -120, 0, -125, 10, 4, 0, 0, 10, 10, -125, 0, -120, 10, 2, 0, 0, -124, 10, 3, 0, 0, 10, -125, 0, -124, 10, -117, 0, -111, 10, 3, 0, 0, 10, -122, 0, -125, 10, -125, 0, 1, 10, -124, 0, -125, 10, 7, 0, 0, 10, 0, 10, 0, 0, -125, 10, 2, 0, 0, -125, 10, -125, 0, -125, 10, -120, 0, 1, 10, -125, 0, -124, 10, -123, 0, -125, 10, -125, 0, 1, 10, -124, 0, -119, 10, 1, 0, -113, 10, -116, 0, -114, 10, -125, 0, 1, 10, -120, 0, 1, 10, -125, 0, 1, 10, -105, 0, 1, 10, -118, 0, 1, 10, -123, 0, -124, 10, -121, 0, 1, 10, -125, 0, 1, 10, -124, 0, -121, 10, 2, 0, 0, -119, 10, 2, 0, 0, -124, 10, -118, 0, -110, 10, 3, 0, 0, 10, -120, 0, 1, 10, -125, 0, 1, 10, -105, 0, 1, 10, -118, 0, 1, 10, -123, 0, -124, 10, -121, 0, 1, 10, -125, 0, 1, 10, -124, 0, -121, 10, 2, 0, 0, -121, 10, 4, 0, 10, 0, 0, -124, 10, -118, 0, -110, 10, 3, 0, 0, 10, -120, 0, 1, 10, -125, 0, 1, 10, -105, 0, 1, 10, -112, 0, -124, 10, -122, 0, 2, 10, 10, -125, 0, 1, 10, -124, 0, -119, 10, 1, 0, -120, 10, 2, 0, 0, -124, 10, -118, 0, -111, 10, -70, 0, -124, 10, -99, 0, -91, 10, 13, 0, 0, 10, 0, 10, 10, 0, 0, 10, 0, 10, 10, 0, -122, 10, -124, 0, 1, 10, -121, 0, 1, 10, -125, 0, 9, 10, 0, 10, 0, 10, 10, 0, 0, 10, -115, 0, 1, 10, -125, 0, 2, 10, 10, -123, 0, 3, 10, 0, 10, -122, 0, 2, 10, 10, -118, 0, 4, 10, 10, 0, 0, -94, 10, -56, 0, 1, 10, -95, 0, -121, 10, -101, 0, -124, 10, -122, 0, 3, 10, 0, 10, -107, 0, -125, 10, -121, 0, 2, 10, 0, -26, 10, -90, 0, -118, 10, -89, 0, -124, 10, 1, 0, -124, 10, -38, 0, -123, 10, -60, 0, -123, 10, -46, 0, -122, 10, -100, 0, -124, 10, -38, 0, -122, 10, -106, 0, 2, 10, 10, -122, 0, 2, 10, 10, -90, 0, 2, 10, 10, -122, 0, 2, 10, 10, -120, 0, 7, 10, 0, 10, 0, 10, 0, 10, -97, 0, 2, 10, 10, -75, 0, 1, 10, -113, 0, 1, 10, -114, 0, 2, 10, 10, -122, 0, 1, 10, -109, 0, 2, 10, 10, -125, 0, 1, 10, -119, 0, 1, 10, -121, 9, 1, 6, -124, 9, 4, 10, 10, 0, 1, -104, 10, 2, 7, 7, -122, 10, -123, 4, -69, 10, 1, 2, -125, 10, -122, 2, 2, 4, 4, -124, 10, -118, 2, 2, 4, 4, -108, 10, -115, 4, -93, 10, -110, 0, -2, 10, -93, 0, -2, 10, -111, 10, 2, 4, 4, -2, 10, -92, 10, -59, 0, -123, 10, 1, 9, -96, 10, -113, 0, -111, 10, -44, 0, -124, 10, -122, 0, 2, 10, 10, -34, 0, -122, 10, -88, 0, -124, 10, -34, 0, 1, 10, -112, 0, -32, 10, -99, 0, -125, 10, -92, 0, -100, 10, -100, 0, -125, 10, -78, 0, -113, 10, -116, 0, -124, 10, -81, 0, 1, 10, -9, 0, -124, 10, -29, 0, 2, 10, 10, -97, 0, 1, 10, -90, 0, -38, 10, -92, 0, -36, 10, -82, 0, -46, 10, -121, 0, -116, 10, -123, 0, -122, 10, -103, 1, 1, 10, -123, 1, 9, 10, 1, 10, 1, 1, 10, 1, 1, 10, -20, 1, -95, 10, -2, 1, -19, 1, -110, 10, -64, 1, 2, 10, 10, -74, 1, -88, 10, -116, 1, -12, 10, -125, 1, 3, 10, 1, 10, -2, 1, -119, 1, -109, 10, -118, 2, -121, 10, -102, 0, -122, 10, -102, 0, -118, 10, -38, 0, -125, 10, -122, 0, 2, 10, 10, -122, 0, 2, 10, 10, -122, 0, 2, 10, 10, -125, 0, -93, 10};
  46.  
  47.    static {
  48.       dirIndices = RLEUtilities.readRLE(dirIndices);
  49.       dirValues = RLEUtilities.readRLE(dirValues);
  50.    }
  51.  
  52.    Bidi(Bidi var1, int var2, int var3) {
  53.       byte[] var4 = var1.dirs;
  54.       byte[] var5 = createLineLevels(var4, var1.levels, var1.ltr, var2, var3);
  55.       this.ltr = var1.ltr;
  56.       this.dirs = null;
  57.       this.levels = var5;
  58.    }
  59.  
  60.    protected Bidi(byte[] var1, boolean var2) {
  61.       this.ltr = var2;
  62.       this.dirs = null;
  63.       this.levels = var1;
  64.    }
  65.  
  66.    Bidi(byte[] var1, byte[] var2, boolean var3) {
  67.       applyBidiRules((byte[])var1.clone(), var2, var3);
  68.       this.ltr = var3;
  69.       this.dirs = var1;
  70.       this.levels = var2;
  71.    }
  72.  
  73.    Bidi(char[] var1) {
  74.       this(var1, defaultIsLTR(var1, 0, var1.length));
  75.    }
  76.  
  77.    Bidi(char[] var1, boolean var2) {
  78.       this(var1, getEmbeddingArray(var1, var2), var2);
  79.    }
  80.  
  81.    Bidi(char[] var1, byte[] var2, boolean var3) {
  82.       byte[] var4 = getDirectionCodeArray(var1);
  83.  
  84.       for(int var5 = 0; var5 < var2.length; ++var5) {
  85.          if ((var2[var5] & 16) != 0) {
  86.             var2[var5] = (byte)(var2[var5] & 15);
  87.             var4[var5] = (byte)(var2[var5] & 1);
  88.          }
  89.       }
  90.  
  91.       applyBidiRules((byte[])var4.clone(), var2, var3);
  92.       this.ltr = var3;
  93.       this.dirs = var4;
  94.       this.levels = var2;
  95.    }
  96.  
  97.    static void applyBidiRules(byte[] var0, byte[] var1, boolean var2) {
  98.       resolveWeakTypes(var0, var1, var2);
  99.       resolveNeutralTypes(var0, var1, var2);
  100.       resolveImplicitLevels(var0, var1, var2);
  101.    }
  102.  
  103.    private static int[] computeContiguousOrder(int[] var0, int var1, int var2) {
  104.       int[] var3 = new int[var2 - var1];
  105.  
  106.       for(int var4 = 0; var4 < var3.length; ++var4) {
  107.          var3[var4] = var4 + var1;
  108.       }
  109.  
  110.       for(int var5 = 0; var5 < var3.length - 1; ++var5) {
  111.          int var6 = var5;
  112.          int var7 = var0[var3[var5]];
  113.  
  114.          for(int var8 = var5; var8 < var3.length; ++var8) {
  115.             if (var0[var3[var8]] < var7) {
  116.                var6 = var8;
  117.                var7 = var0[var3[var8]];
  118.             }
  119.          }
  120.  
  121.          int var9 = var3[var5];
  122.          var3[var5] = var3[var6];
  123.          var3[var6] = var9;
  124.       }
  125.  
  126.       if (var1 != 0) {
  127.          for(int var10 = 0; var10 < var3.length; ++var10) {
  128.             var3[var10] -= var1;
  129.          }
  130.       }
  131.  
  132.       int var11;
  133.       for(var11 = 0; var11 < var3.length && var3[var11] == var11; ++var11) {
  134.       }
  135.  
  136.       if (var11 == var3.length) {
  137.          return null;
  138.       } else {
  139.          return getInverseOrder(var3);
  140.       }
  141.    }
  142.  
  143.    static Bidi createBidi(char[] var0) {
  144.       return new Bidi(var0);
  145.    }
  146.  
  147.    Bidi createLineBidi(int var1, int var2) {
  148.       byte[] var3 = new byte[var2 - var1];
  149.       System.arraycopy(this.levels, var1, var3, 0, var3.length);
  150.       if (this.dirs != null) {
  151.          byte var4 = (byte)(this.ltr ? 0 : 1);
  152.          int var5 = var3.length;
  153.  
  154.          while(true) {
  155.             --var5;
  156.             if (var5 < 0 || var3[var5] == var4 || this.dirs[var1 + var5] != 9) {
  157.                break;
  158.             }
  159.  
  160.             var3[var5] = var4;
  161.          }
  162.       }
  163.  
  164.       return new Bidi(var3, this.ltr);
  165.    }
  166.  
  167.    static byte[] createLineLevels(byte[] var0, byte[] var1, boolean var2, int var3, int var4) {
  168.       byte[] var5 = new byte[var4 - var3];
  169.       System.arraycopy(var1, var3, var5, 0, var5.length);
  170.       byte var6 = (byte)(var2 ? 0 : 1);
  171.  
  172.       for(int var7 = var4 - var3 - 1; var7 >= 0 && var5[var7] != var6 && var0[var3 + var7] == 9; --var7) {
  173.          var5[var7] = var6;
  174.       }
  175.  
  176.       return var5;
  177.    }
  178.  
  179.    static int[] createVisualToLogicalMap(byte[] var0) {
  180.       int var1 = var0.length;
  181.       int[] var2 = new int[var1];
  182.       byte var3 = 17;
  183.       byte var4 = 0;
  184.  
  185.       for(int var5 = 0; var5 < var1; ++var5) {
  186.          var2[var5] = var5;
  187.          byte var6 = var0[var5];
  188.          if (var6 > var4) {
  189.             var4 = var6;
  190.          }
  191.  
  192.          if ((var6 & 1) != 0 && var6 < var3) {
  193.             var3 = var6;
  194.          }
  195.       }
  196.  
  197.       label59:
  198.       for(; var4 >= var3; --var4) {
  199.          int var10 = 0;
  200.  
  201.          while(true) {
  202.             while(var10 >= var1 || var0[var10] >= var4) {
  203.                int var7 = var10++;
  204.                if (var7 == var0.length) {
  205.                   continue label59;
  206.                }
  207.  
  208.                while(var10 < var1 && var0[var10] >= var4) {
  209.                   ++var10;
  210.                }
  211.  
  212.                for(int var8 = var10 - 1; var7 < var8; --var8) {
  213.                   int var9 = var2[var7];
  214.                   var2[var7] = var2[var8];
  215.                   var2[var8] = var9;
  216.                   ++var7;
  217.                }
  218.             }
  219.  
  220.             ++var10;
  221.          }
  222.       }
  223.  
  224.       return var2;
  225.    }
  226.  
  227.    static boolean defaultIsLTR(char[] var0, int var1, int var2) {
  228.       while(var1 < var2) {
  229.          byte var3 = getDirectionCode(var0[var1++]);
  230.          if (strongDirection[var3]) {
  231.             return var3 == 0;
  232.          }
  233.       }
  234.  
  235.       return true;
  236.    }
  237.  
  238.    static int[] getContiguousOrder(int[] var0) {
  239.       return var0 != null ? computeContiguousOrder(var0, 0, var0.length) : null;
  240.    }
  241.  
  242.    static byte getDirectionCode(char var0) {
  243.       return dirValues[(dirIndices[var0 >> 7] << 7) + (var0 & 127)];
  244.    }
  245.  
  246.    static byte[] getDirectionCodeArray(char[] var0) {
  247.       byte var1 = 10;
  248.       byte[] var2 = new byte[var0.length];
  249.  
  250.       for(int var3 = 0; var3 < var0.length; ++var3) {
  251.          char var4 = var0[var3];
  252.          byte var5 = getDirectionCode(var4);
  253.          if (strongDirectionOrB[var5]) {
  254.             var1 = var5;
  255.          } else if (var5 == 10 && isCombiningMark(var4)) {
  256.             var5 = var1;
  257.          }
  258.  
  259.          var2[var3] = var5;
  260.       }
  261.  
  262.       return var2;
  263.    }
  264.  
  265.    static byte[] getEmbeddingArray(char[] var0, boolean var1) {
  266.       byte[] var2 = new byte[var0.length];
  267.       byte var3 = (byte)(var1 ? 0 : 1);
  268.       byte var4 = var3;
  269.       int var5 = 0;
  270.       int var6 = 0;
  271.       byte[] var7 = new byte[16];
  272.  
  273.       for(int var8 = 0; var8 < var0.length; ++var8) {
  274.          char var9 = var0[var8];
  275.          switch (var9) {
  276.             case '\u202a':
  277.             case '\u202d':
  278.                if (var6 > 0) {
  279.                   ++var6;
  280.                } else {
  281.                   byte var11 = (byte)((var4 & 14) + 2);
  282.                   if (var11 < 16) {
  283.                      var7[var5++] = var4;
  284.                      var2[var8] = var4;
  285.                      if (var9 == 8237) {
  286.                         var4 = (byte)(var11 + 16);
  287.                      } else {
  288.                         var4 = var11;
  289.                      }
  290.                      continue;
  291.                   }
  292.  
  293.                   ++var6;
  294.                }
  295.                break;
  296.             case '\u202b':
  297.             case '\u202e':
  298.                if (var6 > 0) {
  299.                   ++var6;
  300.                } else {
  301.                   byte var10 = (byte)((var4 & 15) + 1 | 1);
  302.                   if (var10 < 16) {
  303.                      var7[var5++] = var4;
  304.                      var2[var8] = var4;
  305.                      if (var9 == 8238) {
  306.                         var4 = (byte)(var10 + 16);
  307.                      } else {
  308.                         var4 = var10;
  309.                      }
  310.                      continue;
  311.                   }
  312.  
  313.                   ++var6;
  314.                }
  315.                break;
  316.             case '\u202c':
  317.                if (var6 > 0) {
  318.                   --var6;
  319.                } else if (var5 > 0) {
  320.                   --var5;
  321.                   var4 = var7[var5];
  322.                }
  323.          }
  324.  
  325.          var2[var8] = var4;
  326.       }
  327.  
  328.       return var2;
  329.    }
  330.  
  331.    static int[] getInverseOrder(int[] var0) {
  332.       if (var0 == null) {
  333.          return null;
  334.       } else {
  335.          int[] var1 = new int[var0.length];
  336.  
  337.          for(int var2 = 0; var2 < var0.length; var1[var0[var2]] = var2++) {
  338.          }
  339.  
  340.          return var1;
  341.       }
  342.    }
  343.  
  344.    int getLength() {
  345.       return this.levels.length;
  346.    }
  347.  
  348.    int getLevelAt(int var1) {
  349.       return this.levels[var1];
  350.    }
  351.  
  352.    int getLevelLimit(int var1) {
  353.       byte var2 = this.levels[var1];
  354.  
  355.       do {
  356.          ++var1;
  357.       } while(var1 < this.levels.length && this.levels[var1] == var2);
  358.  
  359.       return var1;
  360.    }
  361.  
  362.    byte[] getLevels() {
  363.       return this.levels;
  364.    }
  365.  
  366.    int[] getLogicalToVisualMap() {
  367.       if (this.l2vMap == null) {
  368.          this.l2vMap = getInverseOrder(this.getVisualToLogicalMap());
  369.       }
  370.  
  371.       return this.l2vMap;
  372.    }
  373.  
  374.    static int[] getNormalizedOrder(int[] var0, byte[] var1, int var2, int var3) {
  375.       if (var0 != null) {
  376.          if (var2 == 0 && var3 == var0.length) {
  377.             return var0;
  378.          } else {
  379.             boolean var4;
  380.             boolean var5;
  381.             byte var6;
  382.             if (var1 == null) {
  383.                var6 = 0;
  384.                var4 = true;
  385.                var5 = true;
  386.             } else if (var1[var2] == var1[var3 - 1]) {
  387.                var6 = var1[var2];
  388.                var5 = (var6 & 1) == 0;
  389.  
  390.                int var7;
  391.                for(var7 = var2; var7 < var3 && var1[var7] >= var6; ++var7) {
  392.                   if (var5) {
  393.                      var5 = var1[var7] == var6;
  394.                   }
  395.                }
  396.  
  397.                var4 = var7 == var3;
  398.             } else {
  399.                var4 = false;
  400.                var6 = 0;
  401.                var5 = false;
  402.             }
  403.  
  404.             if (!var4) {
  405.                return computeContiguousOrder(var0, var2, var3);
  406.             } else if (var5) {
  407.                return null;
  408.             } else {
  409.                int[] var10 = new int[var3 - var2];
  410.                int var8;
  411.                if ((var6 & 1) != 0) {
  412.                   var8 = var0[var3 - 1];
  413.                } else {
  414.                   var8 = var0[var2];
  415.                }
  416.  
  417.                if (var8 == 0) {
  418.                   System.arraycopy(var0, var2, var10, 0, var3 - var2);
  419.                } else {
  420.                   for(int var9 = 0; var9 < var10.length; ++var9) {
  421.                      var10[var9] = var0[var9 + var2] - var8;
  422.                   }
  423.                }
  424.  
  425.                return var10;
  426.             }
  427.          }
  428.       } else {
  429.          return null;
  430.       }
  431.    }
  432.  
  433.    int[] getVisualToLogicalMap() {
  434.       if (this.v2lMap == null) {
  435.          this.v2lMap = createVisualToLogicalMap(this.levels);
  436.       }
  437.  
  438.       return this.v2lMap;
  439.    }
  440.  
  441.    private static boolean isCombiningMark(char var0) {
  442.       return (448 >> Character.getType(var0) & 1) != 0;
  443.    }
  444.  
  445.    boolean isDirectionLTR() {
  446.       return this.ltr;
  447.    }
  448.  
  449.    static void reorderVisually(byte[] var0, Object[] var1) {
  450.       int var2 = var0.length;
  451.       byte var3 = 17;
  452.       byte var4 = 0;
  453.  
  454.       for(int var5 = 0; var5 < var2; ++var5) {
  455.          byte var6 = var0[var5];
  456.          if (var6 > var4) {
  457.             var4 = var6;
  458.          }
  459.  
  460.          if ((var6 & 1) != 0 && var6 < var3) {
  461.             var3 = var6;
  462.          }
  463.       }
  464.  
  465.       label59:
  466.       for(; var4 >= var3; --var4) {
  467.          int var10 = 0;
  468.  
  469.          while(true) {
  470.             while(var10 >= var2 || var0[var10] >= var4) {
  471.                int var7 = var10++;
  472.                if (var7 == var0.length) {
  473.                   continue label59;
  474.                }
  475.  
  476.                while(var10 < var2 && var0[var10] >= var4) {
  477.                   ++var10;
  478.                }
  479.  
  480.                for(int var8 = var10 - 1; var7 < var8; --var8) {
  481.                   Object var9 = var1[var7];
  482.                   var1[var7] = var1[var8];
  483.                   var1[var8] = var9;
  484.                   ++var7;
  485.                }
  486.             }
  487.  
  488.             ++var10;
  489.          }
  490.       }
  491.  
  492.    }
  493.  
  494.    static boolean requiresBidi(char var0) {
  495.       if (var0 < 1425) {
  496.          return false;
  497.       } else if (var0 > 8238) {
  498.          return false;
  499.       } else if (var0 > 8217) {
  500.          return true;
  501.       } else {
  502.          byte var1 = getDirectionCode(var0);
  503.          return var1 == 1 || var1 == 11;
  504.       }
  505.    }
  506.  
  507.    private static void resolveImplicitLevels(byte[] var0, byte[] var1, boolean var2) {
  508.       byte var3 = (byte)(var2 ? 0 : 1);
  509.       int var4 = var0.length;
  510.  
  511.       for(int var5 = 0; var5 < var4; ++var5) {
  512.          byte var6 = var1[var5];
  513.          byte var7 = var6;
  514.          switch (var0[var5]) {
  515.             case 0:
  516.                var7 = (byte)(var6 + 1 & 14);
  517.                break;
  518.             case 1:
  519.             case 11:
  520.                var7 = (byte)(var6 | 1);
  521.                break;
  522.             case 2:
  523.                if ((var6 & 1) != 0) {
  524.                   var7 = (byte)(var6 + 1);
  525.                } else if (var5 != 0 && var1[var5 - 1] == var6) {
  526.                   byte var10 = var0[var5 - 1];
  527.                   if (var10 == 2) {
  528.                      var7 = var1[var5 - 1];
  529.                   } else if (var10 != 0) {
  530.                      var7 = (byte)(var6 + 2);
  531.                   }
  532.                } else {
  533.                   var7 = (byte)(var6 + 2);
  534.                }
  535.             case 3:
  536.             case 4:
  537.             case 6:
  538.             case 9:
  539.             case 10:
  540.             default:
  541.                break;
  542.             case 5:
  543.                var7 = (byte)(var6 + 2 & 14);
  544.                break;
  545.             case 7:
  546.             case 8:
  547.                var7 = var3;
  548.  
  549.                for(int var8 = var5 - 1; var8 >= 0 && var0[var8] == 9; --var8) {
  550.                   var1[var8] = var3;
  551.                }
  552.          }
  553.  
  554.          if (var7 < 16 && var7 != var6) {
  555.             var1[var5] = var7;
  556.          }
  557.       }
  558.  
  559.       for(int var9 = var4 - 1; var9 >= 0 && var0[var9] == 9; --var9) {
  560.          var1[var9] = var3;
  561.       }
  562.  
  563.    }
  564.  
  565.    private static void resolveNeutralTypes(byte[] var0, byte[] var1, boolean var2) {
  566.       int var3 = 0;
  567.       int var4 = var0.length;
  568.  
  569.       while(var3 < var4) {
  570.          byte var5 = var1[var3];
  571.          int var6 = (var5 & 1) == 0 ? 0 : 1;
  572.  
  573.          int var7;
  574.          for(var7 = var3 + 1; var7 < var4 && var1[var7] == var5; ++var7) {
  575.          }
  576.  
  577.          int var8 = var6;
  578.          int var9 = var6;
  579.  
  580.          for(int var10 = var3 - 1; var3 < var7; ++var3) {
  581.             byte var11 = var0[var3];
  582.             switch (var11) {
  583.                case 0:
  584.                   var8 = 0;
  585.                   continue;
  586.                case 1:
  587.                case 11:
  588.                   var8 = 1;
  589.                case 2:
  590.                case 3:
  591.                case 4:
  592.                case 5:
  593.                case 6:
  594.                default:
  595.                   continue;
  596.                case 7:
  597.                case 8:
  598.                case 9:
  599.                case 10:
  600.             }
  601.  
  602.             if (var3 > var10) {
  603.                var9 = var6;
  604.                var10 = var3 + 1;
  605.  
  606.                label63:
  607.                while(var10 < var7) {
  608.                   byte var12 = var0[var10];
  609.                   switch (var12) {
  610.                      case 0:
  611.                         var9 = var8 == 0 ? 0 : var6;
  612.                         break label63;
  613.                      case 1:
  614.                      case 11:
  615.                         var9 = var8 == 0 ? var6 : 1;
  616.                         break label63;
  617.                      default:
  618.                         ++var10;
  619.                   }
  620.                }
  621.             }
  622.  
  623.             var0[var3] = (byte)var9;
  624.          }
  625.       }
  626.  
  627.    }
  628.  
  629.    private static void resolveWeakTypes(byte[] var0, byte[] var1, boolean var2) {
  630.       int var3 = 0;
  631.       int var4 = var0.length;
  632.       byte var5 = -1;
  633.       byte var6 = var0[var3];
  634.  
  635.       byte var9;
  636.       for(boolean var7 = var6 == 11; var3 < var4; var6 = var9) {
  637.          int var8 = var3 + 1;
  638.          var9 = var8 == var4 ? -1 : var0[var8];
  639.          if (var9 == 2 && var7) {
  640.             var9 = 5;
  641.          }
  642.  
  643.          byte var10;
  644.          var10 = var6;
  645.          label67:
  646.          switch (var6) {
  647.             case 0:
  648.             case 1:
  649.                var7 = false;
  650.             case 2:
  651.             case 5:
  652.             case 7:
  653.             case 8:
  654.             case 9:
  655.             case 10:
  656.             default:
  657.                break;
  658.             case 3:
  659.                if (var5 == 2 && var9 == 2) {
  660.                   var10 = 2;
  661.                   break;
  662.                }
  663.  
  664.                var10 = 10;
  665.                break;
  666.             case 4:
  667.                if (var5 != 2 && var9 != 2) {
  668.                   if (var9 == 4 && !var7) {
  669.                      for(int var11 = var8 + 1; var11 < var0.length; ++var11) {
  670.                         byte var12 = var0[var11];
  671.                         if (var12 != 4) {
  672.                            if (var12 != 2) {
  673.                               break label67;
  674.                            }
  675.  
  676.                            while(var8 < var11) {
  677.                               var0[var8++] = 2;
  678.                            }
  679.  
  680.                            var10 = 2;
  681.                            var9 = var12;
  682.                            break label67;
  683.                         }
  684.                      }
  685.                   } else {
  686.                      var10 = 10;
  687.                   }
  688.                } else {
  689.                   var10 = 2;
  690.                }
  691.                break;
  692.             case 6:
  693.                if (var5 == 2 && var9 == 2) {
  694.                   var10 = 2;
  695.                } else {
  696.                   if (var5 == 5 && var9 == 5) {
  697.                      var10 = 5;
  698.                      break;
  699.                   }
  700.  
  701.                   var10 = 10;
  702.                }
  703.                break;
  704.             case 11:
  705.                var7 = true;
  706.          }
  707.  
  708.          var0[var3] = var10;
  709.          var3 = var8;
  710.          var5 = var10;
  711.       }
  712.  
  713.    }
  714. }
  715.