package org.jabref.logic.formatter.casechanger; import org.jabref.logic.l10n.Localization; import org.jabref.model.cleanup.Formatter; public class TitleCaseFormatter implements Formatter { @Override public String getName() { return Localization.lang("Title case"); } @Override public String getKey() { return "title_case"; } /** * Converts all words to upper case, but converts articles, prepositions, and conjunctions to lower case * Capitalizes first and last word * Does not change words starting with "{" */ @Override public String format(String input) { Title title = new Title(input); title.getWords().stream().filter(Word::isSmallerWord).forEach(Word::toLowerCase); title.getWords().stream().filter(Word::isLargerWord).forEach(Word::toUpperFirst); title.getFirstWord().ifPresent(Word::toUpperFirst); title.getLastWord().ifPresent(Word::toUpperFirst); for (int i = 0; i < (title.getWords().size() - 2); i++) { if (title.getWords().get(i).endsWithColon()) { title.getWords().get(i + 1).toUpperFirst(); } } return title.toString(); } @Override public String getDescription() { return Localization.lang( "Capitalize all words, but converts articles, prepositions, and conjunctions to lower case."); } @Override public String getExampleInput() { return "{BPMN} conformance In open source Engines"; } }