@Override public int hashCode() { return Objects.hash(rule.getId(), offsetPosition, message, suggestedReplacements, sentence, type); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; RuleMatch other = (RuleMatch) o; return Objects.equals(rule.getId(), other.rule.getId()) && Objects.equals(offsetPosition, other.offsetPosition) && Objects.equals(message, other.message) && Objects.equals(suggestedReplacements, other.suggestedReplacements) && Objects.equals(sentence, other.sentence) && Objects.equals(type, other.type); }
@Override public String toString() { if (rule instanceof PatternRule) { return ((PatternRule) rule).getFullId() + ":" + offsetPosition + ":" + message; } else { return rule.getId() + ":" + offsetPosition + ":" + message; } }
/** * Remove rules that can profit from a language model, recreate them with the given model and add them again * @param lm the language model or null if none is available */ private void updateOptionalLanguageModelRules(@Nullable LanguageModel lm) { ResourceBundle messages = getMessageBundle(language); try { List<Rule> rules = language.getRelevantLanguageModelCapableRules(messages, lm, userConfig, altLanguages); userRules.removeIf(rule -> optionalLanguageModelRules.contains(rule.getId())); optionalLanguageModelRules.clear(); rules.stream().map(Rule::getId).forEach(optionalLanguageModelRules::add); userRules.addAll(rules); } catch(Exception e) { throw new RuntimeException("Could not load language model capable rules.", e); } }
/** * Get pattern rules by Id and SubId. This returns a list because rules that use {@code <or>...</or>} * are internally expanded into several rules. * @return a List of {@link Rule} objects * @since 2.3 */ public List<AbstractPatternRule> getPatternRulesByIdAndSubId(String Id, String subId) { List<Rule> rules = getAllRules(); List<AbstractPatternRule> rulesById = new ArrayList<>(); for (Rule rule : rules) { if (rule instanceof AbstractPatternRule && rule.getId().equals(Id) && ((AbstractPatternRule) rule).getSubId().equals(subId)) { rulesById.add((AbstractPatternRule) rule); } } return rulesById; }
private boolean ignoreRule(Rule rule) { Category ruleCategory = rule.getCategory(); boolean isCategoryDisabled = (disabledRuleCategories.contains(ruleCategory.getId()) || rule.getCategory().isDefaultOff()) && !enabledRuleCategories.contains(ruleCategory.getId()); boolean isRuleDisabled = disabledRules.contains(rule.getId()) || (rule.isDefaultOff() && !enabledRules.contains(rule.getId())); boolean isDisabled; if (isCategoryDisabled) { isDisabled = !enabledRules.contains(rule.getId()); } else { isDisabled = isRuleDisabled; } return isDisabled; }
private Rule getRuleById(String id, List<AbstractPatternRule> rules) { for (Rule rule : rules) { if (rule.getId().equals(id)) { return rule; } } throw new RuntimeException("No rule found for id '" + id + "'"); }
private List<Rule> getRulesById(String id, List<AbstractPatternRule> rules) { List<Rule> result = new ArrayList<>(); for (Rule rule : rules) { if (rule.getId().equals(id)) { result.add(rule); } } return result; }
private void assertIdUniqueness(Set<String> ids, Set<Class> ruleClasses, Language language, Rule rule) { String ruleId = rule.getId(); Class relevantClass = rule instanceof AbstractPatternRule ? AbstractPatternRule.class : rule.getClass(); if (ids.contains(ruleId) && !ruleClasses.contains(relevantClass)) { throw new RuntimeException("Rule id occurs more than once: '" + ruleId + "', language: " + language); } ids.add(ruleId); ruleClasses.add(relevantClass); }
private boolean haveSameRule(RuleMatch match, RuleMatch nextMatch) { if (!(match.getRule() instanceof AbstractPatternRule) || !(nextMatch.getRule() instanceof AbstractPatternRule)) { return false; } String id1 = match.getRule().getId(); String subId1 = ((AbstractPatternRule) match.getRule()).getSubId(); String subId2 = ((AbstractPatternRule) nextMatch.getRule()).getSubId(); if (subId1 == null && subId2 != null) { return false; } if (subId1 != null && subId2 == null) { return false; } return id1 != null && id1.equals(nextMatch.getRule().getId()) && (subId1 == null && subId2 == null || subId1 != null && subId1.equals(subId2)); }
private List<String> getRuleMatchIds(JLanguageTool langTool) throws IOException { String input = "A small toast. No error here. Foo go bar. First goes last there, please!"; List<RuleMatch> matches = langTool.check(input); List<String> ruleMatchIds = new ArrayList<>(); for (RuleMatch match : matches) { ruleMatchIds.add(match.getRule().getId()); } return ruleMatchIds; }
private void writeMatchesSection(String sectionName, JsonGenerator g, List<RuleMatch> matches, AnnotatedText text, ContextTools contextTools, Language lang) throws IOException { g.writeArrayFieldStart(sectionName); for (RuleMatch match : matches) { g.writeStartObject(); g.writeStringField("message", cleanSuggestion(match.getMessage())); if (match.getShortMessage() != null) { g.writeStringField("shortMessage", cleanSuggestion(match.getShortMessage())); } writeReplacements(g, match); g.writeNumberField("offset", match.getFromPos()); g.writeNumberField("length", match.getToPos()-match.getFromPos()); writeContext(g, match, text, contextTools); g.writeObjectFieldStart("type"); g.writeStringField("typeName", match.getType().toString()); g.writeEndObject(); writeRule(g, match); g.writeBooleanField("ignoreForIncompleteSentence", RuleInformation.ignoreForIncompleteSentences(match.getRule().getId(), lang)); g.writeEndObject(); } g.writeEndArray(); }
private void disableSpellingRules(JLanguageTool languageTool) { List<Rule> allRules = languageTool.getAllRules(); for (Rule rule : allRules) { if (rule instanceof SpellingCheckRule) { languageTool.disableRule(rule.getId()); } } }
private void validateRuleIds(Language lang, JLanguageTool languageTool) { List<Rule> allRules = languageTool.getAllRules(); Set<String> ids = new HashSet<>(); Set<Class> ruleClasses = new HashSet<>(); Set<String> categoryIds = new HashSet<>(); for (Rule rule : allRules) { assertIdUniqueness(ids, ruleClasses, lang, rule); if (rule.getId().equalsIgnoreCase("ID")) { System.err.println("WARNING: " + lang.getShortCodeWithCountryAndVariant() + " has a rule with id 'ID', this should probably be changed"); } Category category = rule.getCategory(); if (category != null && category.getId() != null) { String catId = category.getId().toString(); if (!catId.matches("[A-Z0-9_-]+") && !categoryIds.contains(catId)) { System.err.println("WARNING: category id '" + catId + "' doesn't match expected regexp [A-Z0-9_-]+"); categoryIds.add(catId); } } } }
public static void disableAllRulesExcept(JLanguageTool lt, String ruleIdToActivate) { for (Rule rule : lt.getAllRules()) { lt.disableRule(rule.getId()); } lt.enableRule(ruleIdToActivate); }
private void setUpRule(Language language) { lt = new JLanguageTool(language); for (Rule rule : lt.getAllRules()) { lt.disableRule(rule.getId()); } GenericUnpairedBracketsRule rule = new GenericUnpairedBracketsRule(TestTools.getEnglishMessages(), Arrays.asList("»"), Arrays.asList("«")); lt.addRule(rule); }
private int getMatchPriority(RuleMatch r) { if (r.getRule().getCategory().getId() == null) { return 0; } int categoryPriority = language.getPriorityForId(r.getRule().getCategory().getId().toString()); int rulePriority = language.getPriorityForId(r.getRule().getId()); // if there is a priority defined for rule it takes precedence over category priority if (rulePriority != 0) { return rulePriority; } else { return categoryPriority; } }
private void setUpRule(JLanguageTool lt) { for (Rule rule : lt.getAllRules()) { lt.disableRule(rule.getId()); } MultipleWhitespaceRule rule = new MultipleWhitespaceRule(TestTools.getEnglishMessages(), TestTools.getDemoLanguage()); lt.addRule(rule); }
private void setUpRule(JLanguageTool lt) { for (Rule rule : lt.getAllRules()) { lt.disableRule(rule.getId()); } PunctuationMarkAtParagraphEnd rule = new PunctuationMarkAtParagraphEnd(TestTools.getEnglishMessages(), TestTools.getDemoLanguage()); lt.addRule(rule); }