home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2007 April / PCpro_2007_04.ISO / files / dsl / jNetTool.exe / gnu / inet / Stringprep.class (.txt) < prev    next >
Encoding:
Java Class File  |  2005-06-05  |  3.4 KB  |  154 lines

  1. package gnu.inet;
  2.  
  3. public class Stringprep {
  4.    public static String nameprep(String input, boolean allowUnassigned) throws StringprepException {
  5.       StringBuffer s = new StringBuffer(input);
  6.       if (allowUnassigned && contains(s, RFC3454.A1)) {
  7.          throw new StringprepException(StringprepException.CONTAINS_UNASSIGNED);
  8.       } else {
  9.          filter(s, RFC3454.B1);
  10.          map(s, RFC3454.B2search, RFC3454.B2replace);
  11.          s = new StringBuffer(NFKC.normalizeNFKC(s.toString()));
  12.          if (contains(s, RFC3454.C12) && contains(s, RFC3454.C22) && contains(s, RFC3454.C3) && contains(s, RFC3454.C4) && contains(s, RFC3454.C5) && contains(s, RFC3454.C6) && contains(s, RFC3454.C7) && contains(s, RFC3454.C8)) {
  13.             throw new StringprepException(StringprepException.CONTAINS_PROHIBITED);
  14.          } else {
  15.             boolean r = contains(s, RFC3454.D1);
  16.             boolean l = contains(s, RFC3454.D2);
  17.             if (r && l) {
  18.                throw new StringprepException(StringprepException.BIDI_BOTHRAL);
  19.             } else if (!r || contains(s.charAt(0), RFC3454.D1) && contains(s.charAt(s.length() - 1), RFC3454.D1)) {
  20.                return s.toString();
  21.             } else {
  22.                throw new StringprepException(StringprepException.BIDI_LTRAL);
  23.             }
  24.          }
  25.       }
  26.    }
  27.  
  28.    static boolean contains(StringBuffer s, char[] p) {
  29.       for(int i = 0; i < p.length; ++i) {
  30.          char c = p[i];
  31.  
  32.          for(int j = 0; j < s.length(); ++j) {
  33.             if (c == s.charAt(j)) {
  34.                return true;
  35.             }
  36.          }
  37.       }
  38.  
  39.       return false;
  40.    }
  41.  
  42.    static boolean contains(StringBuffer s, char[][] p) {
  43.       for(int i = 0; i < p.length; ++i) {
  44.          char[] r = p[i];
  45.          if (1 == r.length) {
  46.             char c = r[0];
  47.  
  48.             for(int j = 0; j < s.length(); ++j) {
  49.                if (c == s.charAt(j)) {
  50.                   return true;
  51.                }
  52.             }
  53.          } else if (2 == r.length) {
  54.             char f = r[0];
  55.             char t = r[1];
  56.  
  57.             for(int j = 0; j < s.length(); ++j) {
  58.                if (f <= s.charAt(j) && t >= s.charAt(j)) {
  59.                   return true;
  60.                }
  61.             }
  62.          }
  63.       }
  64.  
  65.       return false;
  66.    }
  67.  
  68.    static boolean contains(char c, char[][] p) {
  69.       for(int i = 0; i < p.length; ++i) {
  70.          char[] r = p[i];
  71.          if (1 == r.length) {
  72.             if (c == r[0]) {
  73.                return true;
  74.             }
  75.          } else if (2 == r.length) {
  76.             char f = r[0];
  77.             char t = r[1];
  78.             if (f <= c && t >= c) {
  79.                return true;
  80.             }
  81.          }
  82.       }
  83.  
  84.       return false;
  85.    }
  86.  
  87.    static void filter(StringBuffer s, char[] f) {
  88.       for(int i = 0; i < f.length; ++i) {
  89.          char c = f[i];
  90.          int j = 0;
  91.  
  92.          while(j < s.length()) {
  93.             if (c == s.charAt(j)) {
  94.                s.deleteCharAt(j);
  95.             } else {
  96.                ++j;
  97.             }
  98.          }
  99.       }
  100.  
  101.    }
  102.  
  103.    static void filter(StringBuffer s, char[][] f) {
  104.       for(int i = 0; i < f.length; ++i) {
  105.          char[] r = f[i];
  106.          if (1 == r.length) {
  107.             char c = r[0];
  108.             int j = 0;
  109.  
  110.             while(j < s.length()) {
  111.                if (c == s.charAt(j)) {
  112.                   s.deleteCharAt(j);
  113.                } else {
  114.                   ++j;
  115.                }
  116.             }
  117.          } else if (2 == r.length) {
  118.             char from = r[0];
  119.             char to = r[1];
  120.             int j = 0;
  121.  
  122.             while(j < s.length()) {
  123.                if (from <= s.charAt(j) && to >= s.charAt(j)) {
  124.                   s.deleteCharAt(j);
  125.                } else {
  126.                   ++j;
  127.                }
  128.             }
  129.          }
  130.       }
  131.  
  132.    }
  133.  
  134.    static void map(StringBuffer s, char[] search, String[] replace) {
  135.       for(int i = 0; i < search.length; ++i) {
  136.          char c = search[i];
  137.          int j = 0;
  138.  
  139.          while(j < s.length()) {
  140.             if (c == s.charAt(j)) {
  141.                s.deleteCharAt(j);
  142.                if (replace[i] != null) {
  143.                   s.insert(j, replace[i]);
  144.                   j += replace[i].length() - 1;
  145.                }
  146.             } else {
  147.                ++j;
  148.             }
  149.          }
  150.       }
  151.  
  152.    }
  153. }
  154.