void () { assert myLiteral.charAt(myPos) == '%'; PercentSubstitutionChunk chunk = new PercentSubstitutionChunk(myPos); myResult.add(chunk); myPos++; if (isAt('(')) { int mappingEnd = myLiteral.indexOf(')', myPos + 1); if (mappingEnd < 0) { chunk.setEndIndex(myLiteral.length()); chunk.setMappingKey(myLiteral.substring(myPos + 1)); chunk.setUnclosedMapping(); myPos = myLiteral.length(); return; } chunk.setMappingKey(myLiteral.substring(myPos + 1, mappingEnd)); myPos = mappingEnd + 1; } else { chunk.setAutoPosition(mySubstitutionsCount); mySubstitutionsCount++; } chunk.setConversionFlags(parseWhileCharacterInSet(CONVERSION_FLAGS)); chunk.setWidth(parseWidth()); if (isAt('.')) { myPos++; chunk.setPrecision(parseWidth()); } if (isAtSet(LENGTH_MODIFIERS)) { chunk.setLengthModifier(myLiteral.charAt(myPos)); myPos++; } if (isAtSet(VALID_CONVERSION_TYPES)) { chunk.setConversionType(myLiteral.charAt(myPos)); myPos++; } chunk.setEndIndex(myPos); }