X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Futil%2FFormat.java;h=0f12eb833a6973565eae6804d73d3c9fcc9115d0;hb=e7921fdc9d6ab87ef91bb7781dd7d9316e671e3f;hp=712198547eb03dc64ec003455aa957410866310c;hpb=1e5b6995c96364c79329e618f7933caf177b353e;p=jalview.git
diff --git a/src/jalview/util/Format.java b/src/jalview/util/Format.java
index 7121985..0f12eb8 100755
--- a/src/jalview/util/Format.java
+++ b/src/jalview/util/Format.java
@@ -26,11 +26,16 @@
*/
package jalview.util;
+import java.util.Arrays;
+
/**
- * DOCUMENT ME!
+ * A utility class that provides a variety of formatting methods.
+ *
+ * Principle method {@code format} formats the number following printf
+ * conventions. Main limitation: Can only handle one format parameter at a time
+ * Use multiple Format objects to format more than one number
*
- * @author $author$
- * @version $Revision$
+ * @author unknown
*/
public class Format
{
@@ -57,12 +62,59 @@ public class Format
private final String formatString;
/**
- * Creates a new Format object.
+ * Creates a new Format object given a format descriptor, which follows printf
+ * conventions The string has a prefix, a format code and a suffix. The prefix
+ * and suffix become part of the formatted output. The format code directs the
+ * formatting of the (single) parameter to be formatted. The code has the
+ * following structure
+ *
+ * - a % (required)
+ *
- a modifier (optional)
+ *
+ * - +
+ *
- forces display of + for positive numbers
+ *
- 0
+ *
- show leading zeroes
+ *
- -
+ *
- align left in the field
+ *
- space
+ *
- prepend a space in front of positive numbers
+ *
- #
+ *
- use "alternate" format. Add 0 or 0x for octal or hexadecimal numbers.
+ * Don't suppress trailing zeroes in general floating point format.
+ *
+ * - an integer denoting field width (optional)
+ *
- a period followed by an integer denoting precision (optional)
+ *
- a format descriptor (required)
+ *
+ * - f
+ *
- floating point number in fixed format
+ *
- e, E
+ *
- floating point number in exponential notation (scientific format). The
+ * E format results in an uppercase E for the exponent (1.14130E+003), the e
+ * format in a lowercase e.
+ *
- g, G
+ *
- floating point number in general format (fixed format for small
+ * numbers, exponential format for large numbers). Trailing zeroes are
+ * suppressed. The G format results in an uppercase E for the exponent (if
+ * any), the g format in a lowercase e.
+ *
- d, i
+ *
- integer in decimal
+ *
- x
+ *
- integer in hexadecimal
+ *
- o
+ *
- integer in octal
+ *
- s
+ *
- string
+ *
- c
+ *
- character
+ *
+ *
*
* @param s
- * DOCUMENT ME!
+ * the format descriptor
*/
- public Format(String s)
+ public Format(final String s)
{
formatString = s;
width = 0;
@@ -212,63 +264,11 @@ public class Format
}
/**
- * Formats the number following printf conventions. Main limitation: Can only
- * handle one format parameter at a time Use multiple Format objects to format
- * more than one number
- *
- * @param s
- * the format string following printf conventions The string has a
- * prefix, a format code and a suffix. The prefix and suffix become
- * part of the formatted output. The format code directs the
- * formatting of the (single) parameter to be formatted. The code has
- * the following structure
- *
- * - a % (required)
- *
- a modifier (optional)
- *
- * - +
- *
- forces display of + for positive numbers
- *
- 0
- *
- show leading zeroes
- *
- -
- *
- align left in the field
- *
- space
- *
- prepend a space in front of positive numbers
- *
- #
- *
- use "alternate" format. Add 0 or 0x for octal or hexadecimal
- * numbers. Don't suppress trailing zeroes in general floating point
- * format.
- *
- * - an integer denoting field width (optional)
- *
- a period followed by an integer denoting precision (optional)
- *
- a format descriptor (required)
- *
- * - f
- *
- floating point number in fixed format
- *
- e, E
- *
- floating point number in exponential notation (scientific
- * format). The E format results in an uppercase E for the exponent
- * (1.14130E+003), the e format in a lowercase e.
- *
- g, G
- *
- floating point number in general format (fixed format for
- * small numbers, exponential format for large numbers). Trailing
- * zeroes are suppressed. The G format results in an uppercase E for
- * the exponent (if any), the g format in a lowercase e.
- *
- d, i
- *
- integer in decimal
- *
- x
- *
- integer in hexadecimal
- *
- o
- *
- integer in octal
- *
- s
- *
- string
- *
- c
- *
- character
- *
- *
- * @exception IllegalArgumentException
- * if bad format
+ * Returns a 6 character string consisting of the hex values of the colour's
+ * rgb values (left padded with zeroes if necessary)
*
+ * @param color
+ * @return
*/
public static String getHexString(java.awt.Color color)
{
@@ -664,30 +664,22 @@ public class Format
}
/**
- * DOCUMENT ME!
+ * Returns a string consisting of n repeats of character c
*
* @param c
- * DOCUMENT ME!
* @param n
- * DOCUMENT ME!
*
- * @return DOCUMENT ME!
+ * @return
*/
- private static String repeat(char c, int n)
+ static String repeat(char c, int n)
{
if (n <= 0)
{
return "";
}
-
- StringBuffer s = new StringBuffer(n);
-
- for (int i = 0; i < n; i++)
- {
- s.append(c);
- }
-
- return s.toString();
+ char[] chars = new char[n];
+ Arrays.fill(chars, c);
+ return new String(chars);
}
/**
@@ -796,8 +788,8 @@ public class Format
{
w = width;
}
- else if (((fmt == 'd') || (fmt == 'i') || (fmt == 'x') || (fmt == 'X') || (fmt == 'o'))
- && (precision > 0))
+ else if (((fmt == 'd') || (fmt == 'i') || (fmt == 'x') || (fmt == 'X')
+ || (fmt == 'o')) && (precision > 0))
{
w = precision;
}
@@ -839,7 +831,8 @@ public class Format
double factor = 1;
String leading_zeroes = "";
- for (int i = 1; (i <= precision) && (factor <= 0x7FFFFFFFFFFFFFFFL); i++)
+ for (int i = 1; (i <= precision)
+ && (factor <= 0x7FFFFFFFFFFFFFFFL); i++)
{
factor *= 10;
leading_zeroes = leading_zeroes + "0";
@@ -890,21 +883,18 @@ public class Format
String f = "";
int e = 0;
double dd = d;
- double factor = 1;
if (d != 0)
{
while (dd > 10)
{
e++;
- factor /= 10;
dd = dd / 10;
}
while (dd < 1)
{
e--;
- factor *= 10;
dd = dd * 10;
}
}
@@ -914,8 +904,7 @@ public class Format
return fixed_format(d);
}
- d = d * factor;
- f = f + fixed_format(d);
+ f = f + fixed_format(dd);
if ((fmt == 'e') || (fmt == 'g'))
{
@@ -959,7 +948,27 @@ public class Format
*/
public static void appendPercentage(StringBuilder sb, float value, int dp)
{
- sb.append((int) value);
+ /*
+ * rounding first
+ */
+ double d = value;
+ long factor = 1L;
+ for (int i = 0; i < dp; i++)
+ {
+ factor *= 10;
+ }
+ d *= factor;
+ d += 0.5;
+
+ /*
+ * integer part
+ */
+ value = (float) (d / factor);
+ sb.append((long) value);
+
+ /*
+ * decimal places
+ */
if (dp > 0)
{
sb.append(".");