/**
   * Returns true if the specified key produces a glyph.
   *
   * @param keyCode The key code.
   * @return True if the key is a printing key.
   */
  public boolean isPrintingKey(int keyCode) {
    int type = Character.getType(nativeGetDisplayLabel(mPtr, keyCode));

    switch (type) {
      case Character.SPACE_SEPARATOR:
      case Character.LINE_SEPARATOR:
      case Character.PARAGRAPH_SEPARATOR:
      case Character.CONTROL:
      case Character.FORMAT:
        return false;
      default:
        return true;
    }
  }
 public static boolean isPrintable(char c) {
   if (Character.isJavaIdentifierStart(c)) {
     // Letters and $ _
     return true;
   }
   if (Character.isDigit(c)) {
     return true;
   }
   switch (Character.getType(c)) {
     case Character.MODIFIER_SYMBOL:
       return true; // ` ^
     case Character.DASH_PUNCTUATION:
       return true; // -
     case Character.MATH_SYMBOL:
       return true; // = ~ + | < >
     case Character.OTHER_PUNCTUATION:
       return true; // !@#%&*;':",./?
     case Character.START_PUNCTUATION:
       return true; // ( [ {
     case Character.END_PUNCTUATION:
       return true; // ) ] }
   }
   return false;
 }