1 32 package net.sf.retrotranslator.runtime.format; 33 34 import java.util.IllegalFormatCodePointException ; 35 36 39 class CharacterConversion extends Conversion { 40 41 public void format(FormatContext context) { 42 context.assertNoPrecision(); 43 context.assertNoFlag('#'); 44 context.checkWidth(); 45 context.writePadded(printf(context)); 46 } 47 48 private static String printf(FormatContext context) { 49 Object argument = context.getArgument(); 50 if (argument instanceof Character || argument == null) { 51 return String.valueOf(argument); 52 } 53 if (argument instanceof Byte ) { 54 return printf((Byte ) argument); 55 } 56 if (argument instanceof Short ) { 57 return printf((Short ) argument); 58 } 59 if (argument instanceof Integer ) { 60 return printf((Integer ) argument); 61 } 62 throw context.getConversionException(); 63 } 64 65 private static String printf(int codePoint) { 66 if (codePoint < 0 || codePoint > 0x10FFFF) { 67 throw new IllegalFormatCodePointException (codePoint); 68 } 69 if (codePoint < 0x10000) { 70 return Character.toString((char) codePoint); 71 } 72 int low = codePoint & 0x03FF | 0xDC00; 73 int high = ((codePoint - 0x10000) >>> 10) | 0xD800; 74 return new String (new char[]{(char) high, (char) low}); 75 } 76 77 } 78 | Popular Tags |