package org.jabref.logic.formatter.bibtexfields; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jabref.logic.l10n.Localization; import org.jabref.model.cleanup.Formatter; /** * This class transforms ordinal numbers into LaTex superscripts. */ public class OrdinalsToSuperscriptFormatter implements Formatter { // find possible superscripts on word boundaries private static final Pattern SUPERSCRIPT_DETECT_PATTERN = Pattern.compile("\\b(\\d+)(st|nd|rd|th)\\b", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE); private static final String SUPERSCRIPT_REPLACE_PATTERN = "$1\\\\textsuperscript{$2}"; @Override public String getName() { return Localization.lang("Ordinals to LaTeX superscript"); } @Override public String getKey() { return "ordinals_to_superscript"; } /** * Converts ordinal numbers to superscripts, e.g. 1st, 2nd or 3rd. * Will replace ordinal numbers even if they are semantically wrong, e.g. 21rd * * <example> * 1st Conf. Cloud Computing -> 1\textsuperscript{st} Conf. Cloud Computing * </example> */ @Override public String format(String value) { Objects.requireNonNull(value); if (value.isEmpty()) { // nothing to do return value; } Matcher matcher = SUPERSCRIPT_DETECT_PATTERN.matcher(value); // replace globally // adds superscript tag return matcher.replaceAll(SUPERSCRIPT_REPLACE_PATTERN); } @Override public String getDescription() { return Localization.lang("Converts ordinals to LaTeX superscripts."); } @Override public String getExampleInput() { return "11th"; } }