package org.jabref.logic.layout.format;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jabref.logic.layout.LayoutFormatter;
/**
* Converts number to ordinal
*/
public class Ordinal implements LayoutFormatter {
// Detect last digit in number not directly followed by a letter plus the number 11
private static final Pattern NUMBER_PATTERN = Pattern.compile("(1?\\d\\b)");
@Override
public String format(String fieldText) {
if (fieldText == null) {
return null;
}
Matcher m = NUMBER_PATTERN.matcher(fieldText);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String result = m.group(1);
int value = Integer.parseInt(result);
String ordinalString;
switch (value) {
case 1:
ordinalString = "st";
break;
case 2:
ordinalString = "nd";
break;
case 3:
ordinalString = "rd";
break;
default:
ordinalString = "th";
break;
}
m.appendReplacement(sb, result + ordinalString);
}
m.appendTail(sb);
return sb.toString();
}
}