Пример #1
0
  /**
   * 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));
  }