private CharProperty newSingle(final int ch){
  if (has(CASE_INSENSITIVE)) {
    int lower, upper;
    if (has(UNICODE_CASE)) {
      upper=Character.toUpperCase(ch);
      lower=Character.toLowerCase(upper);
      if (upper != lower)       return new SingleU(lower);
    }
 else     if (ASCII.isAscii(ch)) {
      lower=ASCII.toLower(ch);
      upper=ASCII.toUpper(ch);
      if (lower != upper)       return new SingleI(lower,upper);
    }
  }
  if (isSupplementary(ch))   return new SingleS(ch);
  return new Single(ch);
}

private CharProperty newSingle ( final int ch ) { if ( has ( CASE_INSENSITIVE ) ) { int lower , upper ; if ( has ( UNICODE_CASE ) ) { upper = Character . toUpperCase ( ch ) ; lower = Character . toLowerCase ( upper ) ; if ( upper != lower ) return new SingleU ( lower ) ; } else if ( ASCII . isAscii ( ch ) ) { lower = ASCII . toLower ( ch ) ; upper = ASCII . toUpper ( ch ) ; if ( lower != upper ) return new SingleI ( lower , upper ) ; } } if ( isSupplementary ( ch ) ) return new SingleS ( ch ) ; return new Single ( ch ) ; }
returns a suitably optimized , single character matcher .
