/** * Returns a number character sequence. * * @param tb token builder * @param n number to be formatted * @param mp marker parser * @param form language-dependent formatter * @param start start character */ private static void number( final TokenBuilder tb, final long n, final FormatParser mp, final Formatter form, final int start) { // count optional-digit-signs final String pres = mp.pres; int o = 0; for (int i = 0; i < pres.length(); ++i) { if (pres.charAt(i) == '#') ++o; } // count digits int d = 0; for (int i = 0; i < pres.length(); ++i) { final char ch = pres.charAt(i); if (ch >= start && ch <= start + 9) ++d; } // create string representation and build string final String s = Long.toString(n); final StringBuilder tmp = new StringBuilder(); final int r = o + d - s.length(); for (int i = r; i > o; i--) tmp.append((char) start); for (int i = 0; i < s.length(); i++) { tmp.append((char) (s.charAt(i) - '0' + start)); } for (int p = pres.length() - 1, t = tmp.length() - 1; p >= 0 && t >= 0; p--, t--) { final char ch = pres.charAt(p); if (ch < start && ch > start + 9 && ch != '#') tmp.insert(t, ch); } // add ordinal suffix tb.add(tmp.toString()).add(form.ordinal(n, mp.ord)); }