blob: 52756382b240e51478718b5e12e94e9dd08996fd [file] [log] [blame]
package org.unicode.cldr.test;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.unicode.cldr.test.CheckCLDR.CheckStatus.Subtype;
import org.unicode.cldr.util.PatternCache;
import com.ibm.icu.text.UnicodeSet;
public class CheckQuotes extends CheckCLDR {
private static final Pattern ASCII_QUOTES = PatternCache.get("[\'\"]");
private static final Pattern UNITS = PatternCache.get("//ldml/units/.*");
private static final Pattern DELIMITERS = PatternCache.get("//ldml/delimiters/.*");
private static final UnicodeSet VALID_DELIMITERS = new UnicodeSet()
.add(0x2018, 0x201A)
.add(0x201C, 0x201E)
.add(0x300C, 0x300F)
.add(0x2039, 0x203A)
.add(0x00AB)
.add(0x00BB);
@Override
public CheckCLDR handleCheck(String path, String fullPath, String value, Options options,
List<CheckStatus> result) {
if (value == null) {
return this;
}
if (UNITS.matcher(path).matches()) {
Matcher matcher = ASCII_QUOTES.matcher(value);
CheckStatus.Type type = CheckStatus.warningType;
if (this.getCldrFileToCheck().getLocaleID().equals("en")) {
type = CheckStatus.errorType;
}
if (matcher.find()) {
result.add(new CheckStatus().setCause(this)
.setMainType(type)
.setSubtype(Subtype.asciiQuotesNotAllowed)
.setMessage("Use of ASCII quote marks (' \") is discouraged. Use primes for units (′ ″) and curly quotes for text (‘ ’ “ ” …)"));
}
}
if (DELIMITERS.matcher(path).matches()) {
if (!VALID_DELIMITERS.contains(value)) {
result.add(new CheckStatus().setCause(this)
.setMainType(CheckStatus.errorType)
.setSubtype(Subtype.invalidDelimiter)
.setMessage("Invalid delimiter. See https://sites.google.com/site/cldr/translation/characters for a list of valid delimiters."));
}
}
return this;
}
}