home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / lang / ConditionalSpecialCasing.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  4.1 KB  |  236 lines

  1. package java.lang;
  2.  
  3. import java.text.BreakIterator;
  4. import java.util.HashSet;
  5. import java.util.Hashtable;
  6. import java.util.Iterator;
  7. import java.util.Locale;
  8. import sun.text.Normalizer;
  9.  
  10. final class ConditionalSpecialCasing {
  11.    static final int FINAL_CASED = 1;
  12.    static final int AFTER_SOFT_DOTTED = 2;
  13.    static final int MORE_ABOVE = 3;
  14.    static final int AFTER_I = 4;
  15.    static final int NOT_BEFORE_DOT = 5;
  16.    static final int COMBINING_CLASS_ABOVE = 230;
  17.    static Entry[] entry = new Entry[]{new Entry(931, new char[]{'œÇ'}, new char[]{'Œ£'}, (String)null, 1), new Entry(775, new char[]{'Ãá'}, new char[0], "lt", 2), new Entry(73, new char[]{'i', 'Ãá'}, new char[]{'I'}, "lt", 3), new Entry(74, new char[]{'j', 'Ãá'}, new char[]{'J'}, "lt", 3), new Entry(302, new char[]{'ƒØ', 'Ãá'}, new char[]{'ƒÆ'}, "lt", 3), new Entry(204, new char[]{'i', 'Ãá', 'ÃÄ'}, new char[]{'√å'}, "lt", 0), new Entry(205, new char[]{'i', 'Ãá', 'ÃÅ'}, new char[]{'√ç'}, "lt", 0), new Entry(296, new char[]{'i', 'Ãá', 'ÃÉ'}, new char[]{'ƒ®'}, "lt", 0), new Entry(775, new char[0], new char[]{'Ãá'}, "tr", 4), new Entry(775, new char[0], new char[]{'Ãá'}, "az", 4), new Entry(73, new char[]{'ƒ±'}, new char[]{'I'}, "tr", 5), new Entry(73, new char[]{'ƒ±'}, new char[]{'I'}, "az", 5), new Entry(105, new char[]{'i'}, new char[]{'ƒ∞'}, "tr", 0), new Entry(105, new char[]{'i'}, new char[]{'ƒ∞'}, "az", 0)};
  18.    static Hashtable entryTable = new Hashtable();
  19.  
  20.    static int toLowerCaseEx(String var0, int var1, Locale var2) {
  21.       char[] var3 = lookUpTable(var0, var1, var2, true);
  22.       if (var3 != null) {
  23.          return var3.length == 1 ? var3[0] : -1;
  24.       } else {
  25.          return Character.toLowerCase(var0.codePointAt(var1));
  26.       }
  27.    }
  28.  
  29.    static int toUpperCaseEx(String var0, int var1, Locale var2) {
  30.       char[] var3 = lookUpTable(var0, var1, var2, false);
  31.       if (var3 != null) {
  32.          return var3.length == 1 ? var3[0] : -1;
  33.       } else {
  34.          return Character.toUpperCaseEx(var0.codePointAt(var1));
  35.       }
  36.    }
  37.  
  38.    static char[] toLowerCaseCharArray(String var0, int var1, Locale var2) {
  39.       return lookUpTable(var0, var1, var2, true);
  40.    }
  41.  
  42.    static char[] toUpperCaseCharArray(String var0, int var1, Locale var2) {
  43.       char[] var3 = lookUpTable(var0, var1, var2, false);
  44.       return var3 != null ? var3 : Character.toUpperCaseCharArray(var0.codePointAt(var1));
  45.    }
  46.  
  47.    private static char[] lookUpTable(String var0, int var1, Locale var2, boolean var3) {
  48.       HashSet var4 = (HashSet)entryTable.get(new Integer(var0.codePointAt(var1)));
  49.       if (var4 != null) {
  50.          Iterator var5 = var4.iterator();
  51.          String var6 = var2.getLanguage();
  52.  
  53.          while(var5.hasNext()) {
  54.             Entry var7 = (Entry)var5.next();
  55.             String var8 = var7.getLanguage();
  56.             if ((var8 == null || var8.equals(var6)) && isConditionMet(var0, var1, var2, var7.getCondition())) {
  57.                return var3 ? var7.getLowerCase() : var7.getUpperCase();
  58.             }
  59.          }
  60.       }
  61.  
  62.       return null;
  63.    }
  64.  
  65.    private static boolean isConditionMet(String var0, int var1, Locale var2, int var3) {
  66.       switch (var3) {
  67.          case 1:
  68.             return isFinalCased(var0, var1, var2);
  69.          case 2:
  70.             return isAfterSoftDotted(var0, var1);
  71.          case 3:
  72.             return isMoreAbove(var0, var1);
  73.          case 4:
  74.             return isAfterI(var0, var1);
  75.          case 5:
  76.             return !isBeforeDot(var0, var1);
  77.          default:
  78.             return true;
  79.       }
  80.    }
  81.  
  82.    private static boolean isFinalCased(String var0, int var1, Locale var2) {
  83.       BreakIterator var3 = BreakIterator.getWordInstance(var2);
  84.       var3.setText(var0);
  85.  
  86.       int var4;
  87.       for(int var5 = var1; var5 >= 0 && !var3.isBoundary(var5); var5 -= Character.charCount(var4)) {
  88.          var4 = var0.codePointBefore(var5);
  89.          if (isCased(var4)) {
  90.             int var6 = var0.length();
  91.  
  92.             for(int var8 = var1 + Character.charCount(var0.codePointAt(var1)); var8 < var6 && !var3.isBoundary(var8); var8 += Character.charCount(var4)) {
  93.                var4 = var0.codePointAt(var8);
  94.                if (isCased(var4)) {
  95.                   return false;
  96.                }
  97.             }
  98.  
  99.             return true;
  100.          }
  101.       }
  102.  
  103.       return false;
  104.    }
  105.  
  106.    private static boolean isAfterI(String var0, int var1) {
  107.       int var2;
  108.       for(int var4 = var1; var4 > 0; var4 -= Character.charCount(var2)) {
  109.          var2 = var0.codePointBefore(var4);
  110.          if (var2 == 73) {
  111.             return true;
  112.          }
  113.  
  114.          int var3 = Normalizer.getCombiningClass(var2);
  115.          if (var3 == 0 || var3 == 230) {
  116.             return false;
  117.          }
  118.       }
  119.  
  120.       return false;
  121.    }
  122.  
  123.    private static boolean isAfterSoftDotted(String var0, int var1) {
  124.       int var2;
  125.       for(int var4 = var1; var4 > 0; var4 -= Character.charCount(var2)) {
  126.          var2 = var0.codePointBefore(var4);
  127.          if (isSoftDotted(var2)) {
  128.             return true;
  129.          }
  130.  
  131.          int var3 = Normalizer.getCombiningClass(var2);
  132.          if (var3 == 0 || var3 == 230) {
  133.             return false;
  134.          }
  135.       }
  136.  
  137.       return false;
  138.    }
  139.  
  140.    private static boolean isMoreAbove(String var0, int var1) {
  141.       int var4 = var0.length();
  142.  
  143.       int var2;
  144.       for(int var5 = var1 + Character.charCount(var0.codePointAt(var1)); var5 < var4; var5 += Character.charCount(var2)) {
  145.          var2 = var0.codePointAt(var5);
  146.          int var3 = Normalizer.getCombiningClass(var2);
  147.          if (var3 == 230) {
  148.             return true;
  149.          }
  150.  
  151.          if (var3 == 0) {
  152.             return false;
  153.          }
  154.       }
  155.  
  156.       return false;
  157.    }
  158.  
  159.    private static boolean isBeforeDot(String var0, int var1) {
  160.       int var4 = var0.length();
  161.  
  162.       int var2;
  163.       for(int var5 = var1 + Character.charCount(var0.codePointAt(var1)); var5 < var4; var5 += Character.charCount(var2)) {
  164.          var2 = var0.codePointAt(var5);
  165.          if (var2 == 775) {
  166.             return true;
  167.          }
  168.  
  169.          int var3 = Normalizer.getCombiningClass(var2);
  170.          if (var3 == 0 || var3 == 230) {
  171.             return false;
  172.          }
  173.       }
  174.  
  175.       return false;
  176.    }
  177.  
  178.    private static boolean isCased(int var0) {
  179.       int var1 = Character.getType(var0);
  180.       if (var1 != 2 && var1 != 1 && var1 != 3) {
  181.          if (var0 >= 688 && var0 <= 696) {
  182.             return true;
  183.          } else if (var0 >= 704 && var0 <= 705) {
  184.             return true;
  185.          } else if (var0 >= 736 && var0 <= 740) {
  186.             return true;
  187.          } else if (var0 == 837) {
  188.             return true;
  189.          } else if (var0 == 890) {
  190.             return true;
  191.          } else if (var0 >= 7468 && var0 <= 7521) {
  192.             return true;
  193.          } else if (var0 >= 8544 && var0 <= 8575) {
  194.             return true;
  195.          } else {
  196.             return var0 >= 9398 && var0 <= 9449;
  197.          }
  198.       } else {
  199.          return true;
  200.       }
  201.    }
  202.  
  203.    private static boolean isSoftDotted(int var0) {
  204.       switch (var0) {
  205.          case 105:
  206.          case 106:
  207.          case 303:
  208.          case 616:
  209.          case 1110:
  210.          case 1112:
  211.          case 7522:
  212.          case 7725:
  213.          case 7883:
  214.          case 8305:
  215.             return true;
  216.          default:
  217.             return false;
  218.       }
  219.    }
  220.  
  221.    static {
  222.       for(int var0 = 0; var0 < entry.length; ++var0) {
  223.          Entry var1 = entry[var0];
  224.          Integer var2 = new Integer(var1.getCodePoint());
  225.          HashSet var3 = (HashSet)entryTable.get(var2);
  226.          if (var3 == null) {
  227.             var3 = new HashSet();
  228.          }
  229.  
  230.          var3.add(var1);
  231.          entryTable.put(var2, var3);
  232.       }
  233.  
  234.    }
  235. }
  236.