1 package gnu.text; 2 import java.text.Format ; 3 import java.text.FieldPosition ; 4 import java.io.Writer ; 5 import java.io.CharArrayWriter ; 6 import gnu.lists.Consumer; 7 8 public abstract class ReportFormat extends Format 9 { 10 12 public static final int PARAM_FROM_LIST = 0xA0000000; 13 14 16 public static final int PARAM_FROM_COUNT = 0xB0000000; 17 18 19 public static final int PARAM_UNSPECIFIED = 0xC0000000; 20 21 public static int result(int resultCode, int nextArg) 22 { 23 return (resultCode << 24) | nextArg; 24 } 25 public static int nextArg(int result) { return result & 0xffffff; } 26 public static int resultCode(int result) { return result >>> 24; } 27 28 36 public abstract int format(Object [] args, int start, 37 Writer dst, FieldPosition fpos) 38 throws java.io.IOException ; 39 40 public int format(Object arg, int start, Writer dst, FieldPosition fpos) 41 throws java.io.IOException 42 { 43 if (arg instanceof Object []) 44 return format((Object []) arg, start, dst, fpos); 45 else 46 { 47 Object [] args = { arg }; 48 return format(args, start, dst, fpos); 49 } 50 } 51 52 public StringBuffer format(Object obj, StringBuffer sbuf, FieldPosition fpos) 53 { 54 format((Object []) obj, 0, sbuf, fpos); 55 return sbuf; 56 } 57 58 public int format(Object [] args, int start, 59 StringBuffer sbuf, FieldPosition fpos) 60 { 61 CharArrayWriter wr = new CharArrayWriter (); 62 try 63 { 64 start = format(args, start, wr, fpos); 65 if (start < 0) 66 return start; 67 } 68 catch (java.io.IOException ex) 69 { 70 throw new Error ("unexpected exception: "+ex); 71 } 72 sbuf.append(wr.toCharArray()); 73 return start; 74 } 75 76 public static int format(Format fmt, Object [] args, int start, 77 Writer dst, FieldPosition fpos) 78 throws java.io.IOException 79 { 80 if (fmt instanceof ReportFormat) 81 return ((ReportFormat) fmt).format(args, start, dst, fpos); 82 StringBuffer sbuf = new StringBuffer (); 83 if (fmt instanceof java.text.MessageFormat ) 84 start = format(fmt, args, start, sbuf, fpos); 85 else 86 fmt.format(args[start++], sbuf, fpos); 87 int slen = sbuf.length(); 88 char[] cbuf = new char[slen]; 89 sbuf.getChars(0, slen, cbuf, 0); 90 dst.write(cbuf); 91 return start; 92 } 93 94 public static int format(Format fmt, Object [] args, int start, 95 StringBuffer sbuf, FieldPosition fpos) 96 { 97 if (fmt instanceof ReportFormat) 98 return ((ReportFormat) fmt).format(args, start, sbuf, fpos); 99 int nargs; 100 Object arg; 101 if (fmt instanceof java.text.MessageFormat ) 102 { 103 nargs = args.length - start; 104 if (start > 0) 105 { 106 Object [] subarr = new Object [args.length - start]; 107 System.arraycopy(args, start, subarr, 0, subarr.length); 108 arg = subarr; 109 } 110 else 111 arg = args; 112 } 113 else 114 { 115 arg = args[start]; 116 nargs = 1; 117 } 118 fmt.format(arg, sbuf, fpos); 119 return start + nargs; 120 } 121 122 123 public static void print (Writer dst, String str) 124 throws java.io.IOException 125 { 126 if (dst instanceof java.io.PrintWriter ) 127 ((java.io.PrintWriter ) dst).print(str); 128 else 129 dst.write(str.toCharArray()); 130 } 131 132 public static void print (Object value, Consumer out) 133 { 134 if (value instanceof Printable) 135 ((Printable) value).print(out); 136 else 137 out.write(value == null ? "null" : value.toString()); 140 } 141 142 public Object parseObject(String text, java.text.ParsePosition status) 143 { 144 throw new Error ("ReportFormat.parseObject - not implemented"); 145 } 146 147 public static int getParam(Object arg, int defaultValue) 148 { 149 if (arg instanceof Number ) 150 return ((Number ) arg).intValue(); 151 if (arg instanceof Character ) 152 return ((Character ) arg).charValue(); 153 if (arg instanceof Char) 154 return ((Char) arg).charValue(); 155 return defaultValue; 157 } 158 159 protected static int getParam(int param, int defaultValue, Object [] args, int start) 160 { 161 if (param == PARAM_FROM_COUNT) 162 return args.length - start; 163 if (param == PARAM_FROM_LIST) 164 return args == null ? defaultValue : getParam(args[start], defaultValue); 165 if (param == PARAM_UNSPECIFIED) 166 return defaultValue; 167 return param; 169 } 170 171 protected static char getParam(int param, char defaultValue, Object [] args, int start) 172 { 173 return (char) getParam (param, (int) defaultValue, args, start); 174 } 175 176 183 193 } 194 | Popular Tags |