From: Finn B. <bc...@us...> - 2000-11-30 09:03:52
|
Update of /cvsroot/jython/jython/org/python/core In directory slayer.i.sourceforge.net:/tmp/cvs-serv29337 Modified Files: PyString.java Log Message: Added support for formatting of long values in "%d %x %X %o". Index: PyString.java =================================================================== RCS file: /cvsroot/jython/jython/org/python/core/PyString.java,v retrieving revision 2.27 retrieving revision 2.28 diff -C2 -r2.27 -r2.28 *** PyString.java 2000/10/23 19:49:12 2.27 --- PyString.java 2000/11/30 09:03:48 2.28 *************** *** 1604,1607 **** --- 1604,1660 ---- } + public String formatLong(PyString arg, char type, boolean altFlag) { + String s = arg.toString(); + int end = s.length(); + int ptr = 0; + + int numnondigits = 0; + if (type == 'x' || type == 'X') + numnondigits = 2; + + if (s.endsWith("L")) + end--; + + negative = s.charAt(0) == '-'; + if (negative) { + ptr++; + } + + int numdigits = end - numnondigits - ptr; + if (!altFlag) { + switch (type) { + case 'o' : + if (numdigits > 1) { + ++ptr; + --numdigits; + } + break; + case 'x' : + case 'X' : + ptr += 2; + numnondigits -= 2; + break; + } + } + if (precision > numdigits) { + StringBuffer buf = new StringBuffer(); + for (int i = 0; i < numnondigits; ++i) + buf.append(s.charAt(ptr++)); + for (int i = 0; i < precision - numdigits; i++) + buf.append('0'); + for (int i = 0; i < numdigits; i++) + buf.append(s.charAt(ptr++)); + s = buf.toString(); + } else if (end < s.length() || ptr > 0) + s = s.substring(ptr, end); + + switch (type) { + case 'x' : + s = s.toLowerCase(); + break; + } + return s; + } + public String formatInteger(PyObject arg, int radix, boolean unsigned) { return formatInteger(arg.__int__().getValue(), radix, unsigned); *************** *** 1801,1827 **** case 'i': case 'd': ! string = formatInteger(arg, 10, false); break; case 'u': ! string = formatInteger(arg, 10, true); break; case 'o': ! string = formatInteger(arg, 8, true); ! if (altFlag) { ! string = "0" + string; } break; case 'x': ! string = formatInteger(arg, 16, true); ! if (altFlag) { ! string = "0x" + string; } break; case 'X': ! string = formatInteger(arg, 16, true); ! //Do substitution of caps for lowercase here ! if (altFlag) { ! string = "0X" + string; } break; case 'e': --- 1854,1900 ---- case 'i': case 'd': ! if (arg instanceof PyLong) ! string = formatLong(arg.__str__(), c, altFlag); ! else ! string = formatInteger(arg, 10, false); break; case 'u': ! if (arg instanceof PyLong) ! string = formatLong(arg.__str__(), c, altFlag); ! else ! string = formatInteger(arg, 10, true); break; case 'o': ! if (arg instanceof PyLong) ! string = formatLong(arg.__oct__(), c, altFlag); ! else { ! string = formatInteger(arg, 8, true); ! if (altFlag) { ! string = "0" + string; ! } } break; case 'x': ! if (arg instanceof PyLong) ! string = formatLong(arg.__hex__(), c, altFlag); ! else { ! string = formatInteger(arg, 16, true); ! string = string.toLowerCase(); ! if (altFlag) { ! string = "0x" + string; ! } } break; case 'X': ! if (arg instanceof PyLong) ! string = formatLong(arg.__hex__(), c, altFlag); ! else { ! string = formatInteger(arg, 16, true); ! string = string.toUpperCase(); ! if (altFlag) { ! string = "0X" + string; ! } } + break; case 'e': *************** *** 1878,1882 **** throw Py.ValueError("unsupported format character '"+c+"'"); } ! String signString = ""; if (negative) { signString = "-"; --- 1951,1957 ---- throw Py.ValueError("unsupported format character '"+c+"'"); } ! int length = string.length(); ! int skip = 0; ! String signString = null; if (negative) { signString = "-"; *************** *** 1889,1910 **** } ! int length = string.length() + signString.length(); if (width < length) width = length; ! if (ljustFlag && fill==' ') { ! buffer.append(signString); ! buffer.append(string); ! while (width-- > length) ! buffer.append(fill); ! } else { ! if (fill != ' ') { buffer.append(signString); ! } ! while (width-- > length) buffer.append(fill); ! if (fill == ' ') { buffer.append(signString); } buffer.append(string); } } --- 1964,2008 ---- } ! //System.out.println(length + " " + width + " " + signString + " fill:" + fill + " " + string); if (width < length) width = length; ! if (signString != null) { ! if (fill != ' ') buffer.append(signString); ! if (width > length) ! width--; ! } ! if (altFlag && (c == 'x' || c == 'X')) { ! if (fill != ' ') { ! buffer.append('0'); ! buffer.append(c); ! skip += 2; ! } ! width -= 2; ! if (width < 0) ! width = 0; ! length -= 2; ! } ! if (width > length && !ljustFlag) { ! do { buffer.append(fill); ! } while (--width > length); ! } ! if (fill == ' ') { ! if (signString != null) buffer.append(signString); + if (altFlag && (c == 'x' || c == 'X')) { + buffer.append('0'); + buffer.append(c); + skip += 2; } + } + if (skip > 0) + buffer.append(string.substring(skip)); + else buffer.append(string); + + while (--width >= length) { + buffer.append(' '); } } |