001    package fj.function;
002    
003    import fj.F;
004    import fj.F2;
005    import fj.data.Stream;
006    import static fj.Function.curry;
007    
008    /**
009     * First-class functions on Characters.
010     */
011    public final class Characters {
012      public static final F<Character, String> toString = new F<Character, String>() {
013        public String f(final Character c) {return Character.toString(c);}
014      };
015      public static final F<Character, Boolean> isLowerCase = new F<Character, Boolean>() {
016        public Boolean f(final Character ch) {return Character.isLowerCase(ch);}
017      };
018      public static final F<Character, Boolean> isUpperCase = new F<Character, Boolean>() {
019        public Boolean f(final Character ch) {return Character.isUpperCase(ch);}
020      };
021      public static final F<Character, Boolean> isTitleCase = new F<Character, Boolean>() {
022        public Boolean f(final Character ch) {return Character.isTitleCase(ch);}
023      };
024      public static final F<Character, Boolean> isDigit = new F<Character, Boolean>() {
025        public Boolean f(final Character ch) {return Character.isDigit(ch);}
026      };
027      public static final F<Character, Boolean> isDefined = new F<Character, Boolean>() {
028        public Boolean f(final Character ch) {return Character.isDefined(ch);}
029      };
030      public static final F<Character, Boolean> isLetter = new F<Character, Boolean>() {
031        public Boolean f(final Character ch) {return Character.isLetter(ch);}
032      };
033      public static final F<Character, Boolean> isLetterOrDigit = new F<Character, Boolean>() {
034        public Boolean f(final Character ch) {return Character.isLetterOrDigit(ch);}
035      };
036      public static final F<Character, Boolean> isJavaIdentifierStart = new F<Character, Boolean>() {
037        public Boolean f(final Character ch) {return Character.isJavaIdentifierStart(ch);}
038      };
039      public static final F<Character, Boolean> isJavaIdentifierPart = new F<Character, Boolean>() {
040        public Boolean f(final Character ch) {return Character.isJavaIdentifierPart(ch);}
041      };
042      public static final F<Character, Boolean> isUnicodeIdentifierStart = new F<Character, Boolean>() {
043        public Boolean f(final Character ch) {return Character.isUnicodeIdentifierStart(ch);}
044      };
045      public static final F<Character, Boolean> isUnicodeIdentifierPart = new F<Character, Boolean>() {
046        public Boolean f(final Character ch) {return Character.isUnicodeIdentifierPart(ch);}
047      };
048      public static final F<Character, Boolean> isIdentifierIgnorable = new F<Character, Boolean>() {
049        public Boolean f(final Character ch) {return Character.isIdentifierIgnorable(ch);}
050      };
051      public static final F<Character, Character> toLowerCase = new F<Character, Character>() {
052        public Character f(final Character ch) {return Character.toLowerCase(ch);}
053      };
054      public static final F<Character, Character> toUpperCase = new F<Character, Character>() {
055        public Character f(final Character ch) {return Character.toUpperCase(ch);}
056      };
057      public static final F<Character, Character> toTitleCase = new F<Character, Character>() {
058        public Character f(final Character ch) {return Character.toTitleCase(ch);}
059      };
060      public static final F<Character, F<Integer, Integer>> digit = curry(new F2<Character, Integer, Integer>() {
061        public Integer f(final Character ch, final Integer radix) {return Character.digit(ch, radix);}
062      });
063      public static final F<Character, Integer> getNumericValue = new F<Character, Integer>() {
064        public Integer f(final Character ch) {return Character.getNumericValue(ch);}
065      };
066      public static final F<Character, Boolean> isSpaceChar = new F<Character, Boolean>() {
067        public Boolean f(final Character ch) {return Character.isSpaceChar(ch);}
068      };
069      public static final F<Character, Boolean> isWhitespace = new F<Character, Boolean>() {
070        public Boolean f(final Character ch) {return Character.isWhitespace(ch);}
071      };
072      public static final F<Character, Boolean> isISOControl = new F<Character, Boolean>() {
073        public Boolean f(final Character ch) {return Character.isISOControl(ch);}
074      };
075      public static final F<Character, Integer> getType = new F<Character, Integer>() {
076        public Integer f(final Character ch) {return Character.getType(ch);}
077      };
078      public static final F<Character, Byte> getDirectionality = new F<Character, Byte>() {
079        public Byte f(final Character ch) {return Character.getDirectionality(ch);}
080      };
081      public static final F<Character, Boolean> isMirrored = new F<Character, Boolean>() {
082        public Boolean f(final Character ch) {return Character.isMirrored(ch);}
083      };
084      public static final F<Character, Character> reverseBytes = new F<Character, Character>() {
085        public Character f(final Character ch) {return Character.reverseBytes(ch);}
086      };
087      public static final F<Character, Boolean> isNewLine = new F<Character, Boolean>() {
088        public Boolean f(final Character c) { return c == '\n'; }
089      };  
090    }