1313 if (last != result.length()) {
1314 characterIterators.add(
1315 createAttributedCharacterIterator(result.substring
1316 (last)));
1317 last = result.length();
1318 }
1319 if (subFormatter != null) {
1320 AttributedCharacterIterator subIterator =
1321 subFormatter.formatToCharacterIterator(obj);
1322
1323 append(result, subIterator);
1324 if (last != result.length()) {
1325 characterIterators.add(
1326 createAttributedCharacterIterator(
1327 subIterator, Field.ARGUMENT,
1328 Integer.valueOf(argumentNumber)));
1329 last = result.length();
1330 }
1331 arg = null;
1332 }
1333 if (arg != null && arg.length() > 0) {
1334 result.append(arg);
1335 characterIterators.add(
1336 createAttributedCharacterIterator(
1337 arg, Field.ARGUMENT,
1338 Integer.valueOf(argumentNumber)));
1339 last = result.length();
1340 }
1341 }
1342 else {
1343 if (subFormatter != null) {
1344 arg = subFormatter.format(obj);
1345 }
1346 last = result.length();
1347 result.append(arg);
1348 if (i == 0 && fp != null && Field.ARGUMENT.equals(
1349 fp.getFieldAttribute())) {
1350 fp.setBeginIndex(last);
1351 fp.setEndIndex(result.length());
1352 }
1353 last = result.length();
1459 // resize format information arrays if necessary
1460 if (offsetNumber >= formats.length) {
1461 int newLength = formats.length * 2;
1462 Format[] newFormats = new Format[newLength];
1463 int[] newOffsets = new int[newLength];
1464 int[] newArgumentNumbers = new int[newLength];
1465 System.arraycopy(formats, 0, newFormats, 0, maxOffset + 1);
1466 System.arraycopy(offsets, 0, newOffsets, 0, maxOffset + 1);
1467 System.arraycopy(argumentNumbers, 0, newArgumentNumbers, 0, maxOffset + 1);
1468 formats = newFormats;
1469 offsets = newOffsets;
1470 argumentNumbers = newArgumentNumbers;
1471 }
1472 int oldMaxOffset = maxOffset;
1473 maxOffset = offsetNumber;
1474 offsets[offsetNumber] = segments[SEG_RAW].length();
1475 argumentNumbers[offsetNumber] = argumentNumber;
1476
1477 // now get the format
1478 Format newFormat = null;
1479 if (segments[SEG_TYPE].length() != 0) {
1480 int type = findKeyword(segments[SEG_TYPE], TYPE_KEYWORDS);
1481 switch (type) {
1482 case TYPE_NULL:
1483 // Type "" is allowed. e.g., "{0,}", "{0,,}", and "{0,,#}"
1484 // are treated as "{0}".
1485 break;
1486
1487 case TYPE_NUMBER:
1488 switch (findKeyword(segments[SEG_MODIFIER], NUMBER_MODIFIER_KEYWORDS)) {
1489 case MODIFIER_DEFAULT:
1490 newFormat = NumberFormat.getInstance(locale);
1491 break;
1492 case MODIFIER_CURRENCY:
1493 newFormat = NumberFormat.getCurrencyInstance(locale);
1494 break;
1495 case MODIFIER_PERCENT:
1496 newFormat = NumberFormat.getPercentInstance(locale);
1497 break;
1498 case MODIFIER_INTEGER:
1499 newFormat = NumberFormat.getIntegerInstance(locale);
|
1313 if (last != result.length()) {
1314 characterIterators.add(
1315 createAttributedCharacterIterator(result.substring
1316 (last)));
1317 last = result.length();
1318 }
1319 if (subFormatter != null) {
1320 AttributedCharacterIterator subIterator =
1321 subFormatter.formatToCharacterIterator(obj);
1322
1323 append(result, subIterator);
1324 if (last != result.length()) {
1325 characterIterators.add(
1326 createAttributedCharacterIterator(
1327 subIterator, Field.ARGUMENT,
1328 Integer.valueOf(argumentNumber)));
1329 last = result.length();
1330 }
1331 arg = null;
1332 }
1333 if (arg != null && !arg.isEmpty()) {
1334 result.append(arg);
1335 characterIterators.add(
1336 createAttributedCharacterIterator(
1337 arg, Field.ARGUMENT,
1338 Integer.valueOf(argumentNumber)));
1339 last = result.length();
1340 }
1341 }
1342 else {
1343 if (subFormatter != null) {
1344 arg = subFormatter.format(obj);
1345 }
1346 last = result.length();
1347 result.append(arg);
1348 if (i == 0 && fp != null && Field.ARGUMENT.equals(
1349 fp.getFieldAttribute())) {
1350 fp.setBeginIndex(last);
1351 fp.setEndIndex(result.length());
1352 }
1353 last = result.length();
1459 // resize format information arrays if necessary
1460 if (offsetNumber >= formats.length) {
1461 int newLength = formats.length * 2;
1462 Format[] newFormats = new Format[newLength];
1463 int[] newOffsets = new int[newLength];
1464 int[] newArgumentNumbers = new int[newLength];
1465 System.arraycopy(formats, 0, newFormats, 0, maxOffset + 1);
1466 System.arraycopy(offsets, 0, newOffsets, 0, maxOffset + 1);
1467 System.arraycopy(argumentNumbers, 0, newArgumentNumbers, 0, maxOffset + 1);
1468 formats = newFormats;
1469 offsets = newOffsets;
1470 argumentNumbers = newArgumentNumbers;
1471 }
1472 int oldMaxOffset = maxOffset;
1473 maxOffset = offsetNumber;
1474 offsets[offsetNumber] = segments[SEG_RAW].length();
1475 argumentNumbers[offsetNumber] = argumentNumber;
1476
1477 // now get the format
1478 Format newFormat = null;
1479 if (!segments[SEG_TYPE].isEmpty()) {
1480 int type = findKeyword(segments[SEG_TYPE], TYPE_KEYWORDS);
1481 switch (type) {
1482 case TYPE_NULL:
1483 // Type "" is allowed. e.g., "{0,}", "{0,,}", and "{0,,#}"
1484 // are treated as "{0}".
1485 break;
1486
1487 case TYPE_NUMBER:
1488 switch (findKeyword(segments[SEG_MODIFIER], NUMBER_MODIFIER_KEYWORDS)) {
1489 case MODIFIER_DEFAULT:
1490 newFormat = NumberFormat.getInstance(locale);
1491 break;
1492 case MODIFIER_CURRENCY:
1493 newFormat = NumberFormat.getCurrencyInstance(locale);
1494 break;
1495 case MODIFIER_PERCENT:
1496 newFormat = NumberFormat.getPercentInstance(locale);
1497 break;
1498 case MODIFIER_INTEGER:
1499 newFormat = NumberFormat.getIntegerInstance(locale);
|