package org.jabref.logic.formatter.casechanger;
import java.util.List;
import java.util.Objects;
import org.jabref.logic.l10n.Localization;
import org.jabref.logic.protectedterms.ProtectedTermsLoader;
import org.jabref.logic.util.strings.StringLengthComparator;
import org.jabref.model.cleanup.Formatter;
public class ProtectTermsFormatter implements Formatter {
private static ProtectedTermsLoader protectedTermsLoader;
/**
* @Deprecated use ProtectTermsFormatter(ProtectedTermsLoader) instead
*/
@Deprecated
public ProtectTermsFormatter() {
}
public ProtectTermsFormatter(ProtectedTermsLoader protectedTermsLoader) {
ProtectTermsFormatter.protectedTermsLoader = protectedTermsLoader;
}
/**
* This must be called from JabRefMain
*
* @deprecated use ProtectTermsFormatter(ProtectedTermsLoader) instead
*/
@Deprecated
public static void setProtectedTermsLoader(ProtectedTermsLoader loader) {
protectedTermsLoader = loader;
}
private String format(String text, List<String> listOfWords) {
String result = text;
listOfWords.sort(new StringLengthComparator());
// For each word in the list
for (String listOfWord : listOfWords) {
// Add {} if the character before is a space, -, /, (, [, ", or } or if it is at the start of the string but not if it is followed by a }
result = result.replaceAll("(^|[- /\\[(}\"])" + listOfWord + "($|[^a-zA-Z}])", "$1\\{" + listOfWord + "\\}$2");
}
return result;
}
@Override
public String format(String text) {
Objects.requireNonNull(text);
if (text.isEmpty()) {
return text;
}
Objects.requireNonNull(ProtectTermsFormatter.protectedTermsLoader);
return this.format(text, ProtectTermsFormatter.protectedTermsLoader.getProtectedTerms());
}
@Override
public String getDescription() {
return Localization.lang(
"Adds {} brackets around acronyms, month names and countries to preserve their case.");
}
@Override
public String getExampleInput() {
return "In CDMA";
}
@Override
public String getName() {
return Localization.lang("Protect terms");
}
@Override
public String getKey() {
return "protect_terms";
}
}