Home | History | Annotate | Download | only in util
      1 /*
      2  *******************************************************************************
      3  * Copyright (C) 2011-2012, International Business Machines Corporation and         *
      4  * others. All Rights Reserved.                                                *
      5  *******************************************************************************
      6  */
      7 package com.ibm.icu.dev.util;
      8 
      9 import com.ibm.icu.dev.util.UnicodeTransform.Type;
     10 import com.ibm.icu.lang.UCharacter;
     11 import com.ibm.icu.text.Normalizer2;
     12 
     13 /**
     14  * @author markdavis
     15  *
     16  */
     17 public class IcuUnicodeNormalizerFactory implements UnicodeTransform.Factory {
     18 
     19     public UnicodeTransform getInstance(Type type) {
     20         switch (type) {
     21         case NFC:
     22             return new IcuUnicodeNormalizer(Normalizer2.getNFCInstance());
     23         case NFKC:
     24             return new IcuUnicodeNormalizer(Normalizer2.getNFKCInstance());
     25         case NFD:
     26             return new IcuUnicodeNormalizer(Normalizer2.getNFDInstance());
     27         case NFKD:
     28             return new IcuUnicodeNormalizer(Normalizer2.getNFKDInstance());
     29         case CASEFOLD:
     30             return new CaseFolder();
     31         default:
     32             throw new IllegalArgumentException();
     33         }
     34     }
     35 
     36     private static class CaseFolder extends UnicodeTransform {
     37         @Override
     38         public String transform(String source) {
     39             return UCharacter.foldCase(source.toString(), true);
     40         }
     41     }
     42 
     43     private static class IcuUnicodeNormalizer extends UnicodeTransform {
     44         private Normalizer2 normalizer;
     45 
     46         private IcuUnicodeNormalizer(Normalizer2 normalizer) {
     47             this.normalizer = normalizer;
     48         }
     49 
     50         public String transform(String src) {
     51             return normalizer.normalize(src);
     52         }
     53 
     54         public boolean isTransformed(String s) {
     55             return normalizer.isNormalized(s);
     56         }
     57     }
     58 }
     59