@valueerror/ltjs-lang-en 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +232 -0
- package/NOTICE +10 -0
- package/README.md +25 -2
- package/index.js +34 -0
- package/licenses/LGPL-2.1.txt +504 -0
- package/licenses/english-pos-dict.pom.xml +135 -0
- package/licenses/resource_en_12dicts-readme.html +738 -0
- package/licenses/resource_en_agid-readme.txt +340 -0
- package/licenses/resource_en_pos-readme.txt +115 -0
- package/package.json +60 -4
- package/resource-root.js +4 -0
- package/resources/META-INF/org/languagetool/language-module.properties +1 -0
- package/resources/en-chunker.bin +0 -0
- package/resources/en-pos-maxent.bin +0 -0
- package/resources/en-token.bin +0 -0
- package/resources/org/languagetool/resource/en/12dicts-readme.html +738 -0
- package/resources/org/languagetool/resource/en/added.txt +446 -0
- package/resources/org/languagetool/resource/en/added_custom.txt +4 -0
- package/resources/org/languagetool/resource/en/agid-readme.txt +340 -0
- package/resources/org/languagetool/resource/en/compounds.txt +9059 -0
- package/resources/org/languagetool/resource/en/confusion_sets.txt +871 -0
- package/resources/org/languagetool/resource/en/disambiguation.xml +17238 -0
- package/resources/org/languagetool/resource/en/do-not-synthesize.txt +13 -0
- package/resources/org/languagetool/resource/en/en-US-GB.txt +4804 -0
- package/resources/org/languagetool/resource/en/en.sor +211 -0
- package/resources/org/languagetool/resource/en/english.dict +0 -0
- package/resources/org/languagetool/resource/en/english.info +8 -0
- package/resources/org/languagetool/resource/en/english_synth.dict +0 -0
- package/resources/org/languagetool/resource/en/english_synth.info +7 -0
- package/resources/org/languagetool/resource/en/english_tags.txt +88 -0
- package/resources/org/languagetool/resource/en/hunspell/en_AU.dict +0 -0
- package/resources/org/languagetool/resource/en/hunspell/en_AU.info +16 -0
- package/resources/org/languagetool/resource/en/hunspell/en_CA.dict +0 -0
- package/resources/org/languagetool/resource/en/hunspell/en_CA.info +13 -0
- package/resources/org/languagetool/resource/en/hunspell/en_GB.dict +0 -0
- package/resources/org/languagetool/resource/en/hunspell/en_GB.info +15 -0
- package/resources/org/languagetool/resource/en/hunspell/en_NZ.dict +0 -0
- package/resources/org/languagetool/resource/en/hunspell/en_NZ.info +18 -0
- package/resources/org/languagetool/resource/en/hunspell/en_US.dict +0 -0
- package/resources/org/languagetool/resource/en/hunspell/en_US.info +15 -0
- package/resources/org/languagetool/resource/en/hunspell/en_ZA.dict +0 -0
- package/resources/org/languagetool/resource/en/hunspell/en_ZA.info +16 -0
- package/resources/org/languagetool/resource/en/hunspell/ignore.txt +11070 -0
- package/resources/org/languagetool/resource/en/hunspell/prohibit.txt +383 -0
- package/resources/org/languagetool/resource/en/hunspell/prohibit_custom.txt +1 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling.txt +477 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling_custom.txt +1 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling_en-AU.txt +34 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling_en-CA.txt +28 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling_en-GB.txt +44 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling_en-NZ.txt +31 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling_en-US.txt +41 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling_en-ZA.txt +32 -0
- package/resources/org/languagetool/resource/en/hunspell/spelling_merged.txt +0 -0
- package/resources/org/languagetool/resource/en/multiwords.txt +8210 -0
- package/resources/org/languagetool/resource/en/pos-readme.txt +115 -0
- package/resources/org/languagetool/resource/en/removed.txt +31 -0
- package/resources/org/languagetool/resource/en/removed_custom.txt +4 -0
- package/resources/org/languagetool/resource/en/specific_case.txt +5621 -0
- package/resources/org/languagetool/resource/en/word_definitions.txt +1510 -0
- package/resources/org/languagetool/rules/en/coherency.txt +2501 -0
- package/resources/org/languagetool/rules/en/contractions.txt +198 -0
- package/resources/org/languagetool/rules/en/det_a.txt +959 -0
- package/resources/org/languagetool/rules/en/det_an.txt +4080 -0
- package/resources/org/languagetool/rules/en/diacritics.txt +1415 -0
- package/resources/org/languagetool/rules/en/en-AU/grammar.xml +171 -0
- package/resources/org/languagetool/rules/en/en-CA/grammar.xml +197 -0
- package/resources/org/languagetool/rules/en/en-GB/grammar.xml +555 -0
- package/resources/org/languagetool/rules/en/en-GB/replace.txt +104 -0
- package/resources/org/languagetool/rules/en/en-GB/style.xml +302 -0
- package/resources/org/languagetool/rules/en/en-NZ/grammar.xml +171 -0
- package/resources/org/languagetool/rules/en/en-NZ/replace.txt +5 -0
- package/resources/org/languagetool/rules/en/en-US/grammar.xml +913 -0
- package/resources/org/languagetool/rules/en/en-US/replace.txt +74 -0
- package/resources/org/languagetool/rules/en/en-US/style.xml +524 -0
- package/resources/org/languagetool/rules/en/grammar-l2-de.xml +227 -0
- package/resources/org/languagetool/rules/en/grammar-l2-fr.xml +39 -0
- package/resources/org/languagetool/rules/en/grammar.xml +142537 -0
- package/resources/org/languagetool/rules/en/redundancies.txt +866 -0
- package/resources/org/languagetool/rules/en/remote-rule-filters.xml +3622 -0
- package/resources/org/languagetool/rules/en/replace.txt +221 -0
- package/resources/org/languagetool/rules/en/replace_custom.txt +7 -0
- package/resources/org/languagetool/rules/en/replace_profanity.txt +540 -0
- package/resources/org/languagetool/rules/en/style.xml +12556 -0
- package/resources/org/languagetool/rules/en/synonyms.txt +42 -0
- package/resources/org/languagetool/rules/en/wordiness.txt +1061 -0
- package/resources/org/languagetool/rules/en/wrongWordInContext.txt +14 -0
- package/src/lang/en/chunking/EnglishChunkFilter.js +108 -0
- package/src/lang/en/chunking/EnglishChunker.js +135 -0
- package/src/lang/en/language/AmericanEnglish.js +73 -0
- package/src/lang/en/language/AustralianEnglish.js +42 -0
- package/src/lang/en/language/BritishEnglish.js +91 -0
- package/src/lang/en/language/CanadianEnglish.js +70 -0
- package/src/lang/en/language/English.js +398 -0
- package/src/lang/en/language/NewZealandEnglish.js +44 -0
- package/src/lang/en/language/SouthAfricanEnglish.js +40 -0
- package/src/lang/en/language/id2prioBritishEnglish.js +6 -0
- package/src/lang/en/language/id2prioEnglish.js +333 -0
- package/src/lang/en/rules/AbstractEnglishSpellerRule.js +677 -0
- package/src/lang/en/rules/AbstractEnglishSpellerRuleData.js +778 -0
- package/src/lang/en/rules/AdvancedSynthesizerFilter.js +12 -0
- package/src/lang/en/rules/AdverbFilter.js +538 -0
- package/src/lang/en/rules/AmericanReplaceRule.js +57 -0
- package/src/lang/en/rules/AvsAnData.js +37 -0
- package/src/lang/en/rules/AvsAnRule.js +182 -0
- package/src/lang/en/rules/BritishReplaceRule.js +57 -0
- package/src/lang/en/rules/CompoundRule.js +150 -0
- package/src/lang/en/rules/ConsistentApostrophesRule.js +87 -0
- package/src/lang/en/rules/ContractionSpellingRule.js +64 -0
- package/src/lang/en/rules/DateCheckFilter.js +58 -0
- package/src/lang/en/rules/DateFilterHelper.js +51 -0
- package/src/lang/en/rules/EnglishConvertToSentenceCaseFilter.js +17 -0
- package/src/lang/en/rules/EnglishDashRule.js +42 -0
- package/src/lang/en/rules/EnglishDiacriticsRule.js +67 -0
- package/src/lang/en/rules/EnglishMultitokenSpeller.js +15 -0
- package/src/lang/en/rules/EnglishNumberInWordFilter.js +38 -0
- package/src/lang/en/rules/EnglishPartialPosTagFilter.js +29 -0
- package/src/lang/en/rules/EnglishPlainEnglishRule.js +67 -0
- package/src/lang/en/rules/EnglishRedundancyRule.js +67 -0
- package/src/lang/en/rules/EnglishRepeatedWordsRule.js +212 -0
- package/src/lang/en/rules/EnglishSpecificCaseRule.js +47 -0
- package/src/lang/en/rules/EnglishSuppressMisspelledSuggestionsFilter.js +12 -0
- package/src/lang/en/rules/EnglishUnpairedBracketsRule.js +25 -0
- package/src/lang/en/rules/EnglishUnpairedQuotesRule.js +41 -0
- package/src/lang/en/rules/EnglishWordRepeatBeginningRule.js +107 -0
- package/src/lang/en/rules/EnglishWordRepeatRule.js +126 -0
- package/src/lang/en/rules/EnglishWrongWordInContextRule.js +50 -0
- package/src/lang/en/rules/FindSuggestionsFilter.js +41 -0
- package/src/lang/en/rules/FutureDateFilter.js +25 -0
- package/src/lang/en/rules/LongSentenceRule.js +19 -0
- package/src/lang/en/rules/MorfologikAmericanSpellerRule.js +69 -0
- package/src/lang/en/rules/MorfologikAustralianSpellerRule.js +45 -0
- package/src/lang/en/rules/MorfologikBritishSpellerRule.js +47 -0
- package/src/lang/en/rules/MorfologikCanadianSpellerRule.js +45 -0
- package/src/lang/en/rules/MorfologikNewZealandSpellerRule.js +45 -0
- package/src/lang/en/rules/MorfologikSouthAfricanSpellerRule.js +45 -0
- package/src/lang/en/rules/NewYearDateFilter.js +25 -0
- package/src/lang/en/rules/NewZealandReplaceRule.js +56 -0
- package/src/lang/en/rules/NoDisambiguationEnglishPartialPosTagFilter.js +24 -0
- package/src/lang/en/rules/OrdinalSuffixFilter.js +33 -0
- package/src/lang/en/rules/SimpleReplaceProfanityRule.js +55 -0
- package/src/lang/en/rules/SimpleReplaceRule.js +46 -0
- package/src/lang/en/rules/StyleTooOftenUsedAdjectiveRule.js +58 -0
- package/src/lang/en/rules/StyleTooOftenUsedNounRule.js +58 -0
- package/src/lang/en/rules/StyleTooOftenUsedVerbRule.js +58 -0
- package/src/lang/en/rules/UnitConversionRule.js +47 -0
- package/src/lang/en/rules/UnitConversionRuleImperial.js +57 -0
- package/src/lang/en/rules/UnitConversionRuleUS.js +62 -0
- package/src/lang/en/rules/VariantInfo.js +23 -0
- package/src/lang/en/rules/WordCoherencyRule.js +40 -0
- package/src/lang/en/rules/YMDDateCheckFilter.js +25 -0
- package/src/lang/en/rules/YMDNewYearDateFilter.js +25 -0
- package/src/lang/en/rules/translation/BeoLingusTranslator.js +357 -0
- package/src/lang/en/rules/translation/Inflector.js +72 -0
- package/src/lang/en/synthesis/EnglishSynthesizer.js +109 -0
- package/src/lang/en/tagging/EnglishHybridDisambiguator.js +28 -0
- package/src/lang/en/tagging/EnglishTagger.js +78 -0
- package/src/lang/en/tokenizers/EnglishWordTokenizer.js +113 -0
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
// Java: org.languagetool.language.English (rule lists, rule match filter and speller rules follow in F17/F16)
|
|
2
|
+
import { ArrayIndexOutOfBoundsException } from '@valueerror/ltjs-core/src/lib/java/errors.js';
|
|
3
|
+
import { Pattern } from '@valueerror/ltjs-core/src/lib/java/regex/index.js';
|
|
4
|
+
import { javaSplit, javaTrim } from '@valueerror/ltjs-core/src/lib/java/strings.js';
|
|
5
|
+
import { JavaHashMap } from '@valueerror/ltjs-core/src/lib/java/collections/JavaHashMap.js';
|
|
6
|
+
import { SRXSentenceTokenizer } from '@valueerror/ltjs-core/src/core/text/tokenizers/SRXSentenceTokenizer.js';
|
|
7
|
+
import { LanguageWithModel } from '@valueerror/ltjs-core/src/core/LanguageWithModel.js';
|
|
8
|
+
import { LanguageMaintainedState } from '@valueerror/ltjs-core/src/core/LanguageMaintainedState.js';
|
|
9
|
+
import { Contributor } from '@valueerror/ltjs-core/src/core/language/Contributor.js';
|
|
10
|
+
import { DANIEL_NABER, MARCIN_MILKOWSKI } from '@valueerror/ltjs-core/src/core/language/Contributors.js';
|
|
11
|
+
import { createComponent, notPortedYet, sharedComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
|
|
12
|
+
import { getClassBroker, getDataBroker } from '@valueerror/ltjs-core/src/core/resources/LtStatics.js';
|
|
13
|
+
import { registerClass } from '@valueerror/ltjs-core/src/core/resources/ClassBroker.js';
|
|
14
|
+
import { RuleMatch } from '@valueerror/ltjs-core/src/core/rules/model/RuleMatch.js';
|
|
15
|
+
import { SuggestedReplacement } from '@valueerror/ltjs-core/src/core/rules/model/SuggestedReplacement.js';
|
|
16
|
+
import { ITSIssueType } from '@valueerror/ltjs-core/src/core/rules/model/ITSIssueType.js';
|
|
17
|
+
import { ID2PRIO_ENTRIES } from './id2prioEnglish.js';
|
|
18
|
+
import { NullPointerException } from '@valueerror/ltjs-core/src/lib/java/errors.js';
|
|
19
|
+
import { currentTimeMillis } from '@valueerror/ltjs-core/src/lib/java/clock.js';
|
|
20
|
+
import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
|
|
21
|
+
import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
|
|
22
|
+
import { CommaWhitespaceRule } from '@valueerror/ltjs-core/src/core/rules/CommaWhitespaceRule.js';
|
|
23
|
+
import { DoublePunctuationRule } from '@valueerror/ltjs-core/src/core/rules/DoublePunctuationRule.js';
|
|
24
|
+
import { UppercaseSentenceStartRule } from '@valueerror/ltjs-core/src/core/rules/UppercaseSentenceStartRule.js';
|
|
25
|
+
import { MultipleWhitespaceRule } from '@valueerror/ltjs-core/src/core/rules/MultipleWhitespaceRule.js';
|
|
26
|
+
import { SentenceWhitespaceRule } from '@valueerror/ltjs-core/src/core/rules/SentenceWhitespaceRule.js';
|
|
27
|
+
import { WhiteSpaceBeforeParagraphEnd } from '@valueerror/ltjs-core/src/core/rules/WhiteSpaceBeforeParagraphEnd.js';
|
|
28
|
+
import { WhiteSpaceAtBeginOfParagraph } from '@valueerror/ltjs-core/src/core/rules/WhiteSpaceAtBeginOfParagraph.js';
|
|
29
|
+
import { EmptyLineRule } from '@valueerror/ltjs-core/src/core/rules/EmptyLineRule.js';
|
|
30
|
+
import { LongParagraphRule } from '@valueerror/ltjs-core/src/core/rules/LongParagraphRule.js';
|
|
31
|
+
import { ParagraphRepeatBeginningRule } from '@valueerror/ltjs-core/src/core/rules/ParagraphRepeatBeginningRule.js';
|
|
32
|
+
import { PunctuationMarkAtParagraphEnd } from '@valueerror/ltjs-core/src/core/rules/PunctuationMarkAtParagraphEnd.js';
|
|
33
|
+
import { PunctuationMarkAtParagraphEnd2 } from '@valueerror/ltjs-core/src/core/rules/PunctuationMarkAtParagraphEnd2.js';
|
|
34
|
+
import { ReadabilityRule } from '@valueerror/ltjs-core/src/core/rules/ReadabilityRule.js';
|
|
35
|
+
import { LongSentenceRule } from '../rules/LongSentenceRule.js';
|
|
36
|
+
import { ConsistentApostrophesRule } from '../rules/ConsistentApostrophesRule.js';
|
|
37
|
+
import { EnglishSpecificCaseRule } from '../rules/EnglishSpecificCaseRule.js';
|
|
38
|
+
import { EnglishUnpairedBracketsRule } from '../rules/EnglishUnpairedBracketsRule.js';
|
|
39
|
+
import { EnglishUnpairedQuotesRule } from '../rules/EnglishUnpairedQuotesRule.js';
|
|
40
|
+
import { EnglishWordRepeatRule } from '../rules/EnglishWordRepeatRule.js';
|
|
41
|
+
import { AvsAnRule } from '../rules/AvsAnRule.js';
|
|
42
|
+
import { EnglishWordRepeatBeginningRule } from '../rules/EnglishWordRepeatBeginningRule.js';
|
|
43
|
+
import { CompoundRule } from '../rules/CompoundRule.js';
|
|
44
|
+
import { ContractionSpellingRule } from '../rules/ContractionSpellingRule.js';
|
|
45
|
+
import { EnglishWrongWordInContextRule } from '../rules/EnglishWrongWordInContextRule.js';
|
|
46
|
+
import { EnglishDashRule } from '../rules/EnglishDashRule.js';
|
|
47
|
+
import { WordCoherencyRule } from '../rules/WordCoherencyRule.js';
|
|
48
|
+
import { EnglishDiacriticsRule } from '../rules/EnglishDiacriticsRule.js';
|
|
49
|
+
import { EnglishPlainEnglishRule } from '../rules/EnglishPlainEnglishRule.js';
|
|
50
|
+
import { EnglishRedundancyRule } from '../rules/EnglishRedundancyRule.js';
|
|
51
|
+
import { SimpleReplaceRule } from '../rules/SimpleReplaceRule.js';
|
|
52
|
+
import { SimpleReplaceProfanityRule } from '../rules/SimpleReplaceProfanityRule.js';
|
|
53
|
+
import { EnglishRepeatedWordsRule } from '../rules/EnglishRepeatedWordsRule.js';
|
|
54
|
+
import { StyleTooOftenUsedVerbRule } from '../rules/StyleTooOftenUsedVerbRule.js';
|
|
55
|
+
import { StyleTooOftenUsedNounRule } from '../rules/StyleTooOftenUsedNounRule.js';
|
|
56
|
+
import { StyleTooOftenUsedAdjectiveRule } from '../rules/StyleTooOftenUsedAdjectiveRule.js';
|
|
57
|
+
|
|
58
|
+
const FALSE_FRIENDS_PATTERN = Pattern.compile('EN_FOR_[A-Z]+_SPEAKERS_FALSE_FRIENDS.*');
|
|
59
|
+
|
|
60
|
+
const L2_CACHE_MILLIS = 30 * 60 * 1000;
|
|
61
|
+
const cache = new Map(); // Java: English#cache (Guava LoadingCache, expireAfterWrite 30 min): path -> {rules, writtenAt}
|
|
62
|
+
|
|
63
|
+
// Java: English#cache.getUnchecked(String) / CacheLoader#load(String)
|
|
64
|
+
function cacheGetUnchecked(path) {
|
|
65
|
+
const now = currentTimeMillis();
|
|
66
|
+
const e = cache.get(path);
|
|
67
|
+
if (e !== undefined && now - e.writtenAt < L2_CACHE_MILLIS) return e.rules;
|
|
68
|
+
const rules = [];
|
|
69
|
+
const loader = createComponent('org.languagetool.rules.patterns.PatternRuleLoader');
|
|
70
|
+
const is = getDataBroker().getAsStream(path);
|
|
71
|
+
rules.push(...loader.getRules(is, path, null));
|
|
72
|
+
cache.set(path, { rules, writtenAt: now });
|
|
73
|
+
return rules;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const id2prio = new JavaHashMap(); // Java: English#id2prio
|
|
77
|
+
for (const [k, v] of ID2PRIO_ENTRIES) id2prio.put(k, v);
|
|
78
|
+
|
|
79
|
+
// Java: English
|
|
80
|
+
export class English extends LanguageWithModel {
|
|
81
|
+
static FQCN = 'org.languagetool.language.English';
|
|
82
|
+
|
|
83
|
+
// Java: English#getDefaultLanguageVariant()
|
|
84
|
+
getDefaultLanguageVariant() {
|
|
85
|
+
return getClassBroker().forName('org.languagetool.language.AmericanEnglish').getInstance();
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Java: English#createDefaultSentenceTokenizer()
|
|
89
|
+
createDefaultSentenceTokenizer() {
|
|
90
|
+
return new SRXSentenceTokenizer(this);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Java: English#getName()
|
|
94
|
+
getName() {
|
|
95
|
+
return 'English';
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Java: English#getShortCode()
|
|
99
|
+
getShortCode() {
|
|
100
|
+
return 'en';
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Java: English#getCountries()
|
|
104
|
+
getCountries() {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Java: English#createDefaultTagger()
|
|
109
|
+
createDefaultTagger() {
|
|
110
|
+
return sharedComponent('org.languagetool.tagging.en.EnglishTagger');
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Java: English#createDefaultChunker()
|
|
114
|
+
createDefaultChunker() {
|
|
115
|
+
return createComponent('org.languagetool.chunking.EnglishChunker');
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Java: English#createDefaultSynthesizer()
|
|
119
|
+
createDefaultSynthesizer() {
|
|
120
|
+
return sharedComponent('org.languagetool.synthesis.en.EnglishSynthesizer');
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Java: English#createDefaultDisambiguator()
|
|
124
|
+
createDefaultDisambiguator() {
|
|
125
|
+
return createComponent('org.languagetool.tagging.en.EnglishHybridDisambiguator', this.getDefaultLanguageVariant());
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Java: English#createDefaultWordTokenizer()
|
|
129
|
+
createDefaultWordTokenizer() {
|
|
130
|
+
return createComponent('org.languagetool.tokenizers.en.EnglishWordTokenizer');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Java: English#getMaintainers()
|
|
134
|
+
getMaintainers() {
|
|
135
|
+
return [new Contributor('Mike Unwalla'), MARCIN_MILKOWSKI, DANIEL_NABER];
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// Java: English#getMaintainedState()
|
|
139
|
+
getMaintainedState() {
|
|
140
|
+
return LanguageMaintainedState.ActivelyMaintained;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Java: English#getRelevantRules(ResourceBundle,UserConfig,Language,List)
|
|
144
|
+
getRelevantRules(messages, userConfig, motherTongue) {
|
|
145
|
+
const allRules = [];
|
|
146
|
+
if (motherTongue !== null && motherTongue !== undefined) {
|
|
147
|
+
if (motherTongue.getShortCode() === 'de') {
|
|
148
|
+
allRules.push(...cacheGetUnchecked('/org/languagetool/rules/en/grammar-l2-de.xml'));
|
|
149
|
+
} else if (motherTongue.getShortCode() === 'fr') {
|
|
150
|
+
allRules.push(...cacheGetUnchecked('/org/languagetool/rules/en/grammar-l2-fr.xml'));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
allRules.push(
|
|
154
|
+
new CommaWhitespaceRule(messages,
|
|
155
|
+
Example.wrong('We had coffee<marker> ,</marker> cheese and crackers and grapes.'),
|
|
156
|
+
Example.fixed('We had coffee<marker>,</marker> cheese and crackers and grapes.')),
|
|
157
|
+
new DoublePunctuationRule(messages, getUrl('https://languagetool.org/insights/post/punctuation-guide/#what-are-periods')),
|
|
158
|
+
new UppercaseSentenceStartRule(messages, this,
|
|
159
|
+
Example.wrong('This house is old. <marker>it</marker> was built in 1950.'),
|
|
160
|
+
Example.fixed('This house is old. <marker>It</marker> was built in 1950.'),
|
|
161
|
+
getUrl('https://languagetool.org/insights/post/spelling-capital-letters/')),
|
|
162
|
+
new MultipleWhitespaceRule(messages, this),
|
|
163
|
+
new SentenceWhitespaceRule(messages, 2),
|
|
164
|
+
new WhiteSpaceBeforeParagraphEnd(messages, this),
|
|
165
|
+
new WhiteSpaceAtBeginOfParagraph(messages),
|
|
166
|
+
new EmptyLineRule(messages, this),
|
|
167
|
+
new LongSentenceRule(messages, userConfig, 40),
|
|
168
|
+
new LongParagraphRule(messages, this, userConfig),
|
|
169
|
+
// new OpenNMTRule() commented out because of #903
|
|
170
|
+
new ParagraphRepeatBeginningRule(messages, this),
|
|
171
|
+
new PunctuationMarkAtParagraphEnd(messages, this),
|
|
172
|
+
new PunctuationMarkAtParagraphEnd2(messages, this),
|
|
173
|
+
// specific to English:
|
|
174
|
+
new ConsistentApostrophesRule(messages),
|
|
175
|
+
new EnglishSpecificCaseRule(messages),
|
|
176
|
+
new EnglishUnpairedBracketsRule(messages, this),
|
|
177
|
+
new EnglishUnpairedQuotesRule(messages, this),
|
|
178
|
+
new EnglishWordRepeatRule(messages, this),
|
|
179
|
+
new AvsAnRule(messages),
|
|
180
|
+
new EnglishWordRepeatBeginningRule(messages, this),
|
|
181
|
+
new CompoundRule(messages, this, userConfig),
|
|
182
|
+
new ContractionSpellingRule(messages, this),
|
|
183
|
+
new EnglishWrongWordInContextRule(messages, this),
|
|
184
|
+
new EnglishDashRule(messages),
|
|
185
|
+
new WordCoherencyRule(messages),
|
|
186
|
+
new EnglishDiacriticsRule(messages),
|
|
187
|
+
new EnglishPlainEnglishRule(messages),
|
|
188
|
+
new EnglishRedundancyRule(messages),
|
|
189
|
+
new SimpleReplaceRule(messages, this),
|
|
190
|
+
new SimpleReplaceProfanityRule(messages, this),
|
|
191
|
+
new ReadabilityRule(messages, this, userConfig, false),
|
|
192
|
+
new ReadabilityRule(messages, this, userConfig, true),
|
|
193
|
+
new EnglishRepeatedWordsRule(messages),
|
|
194
|
+
new StyleTooOftenUsedVerbRule(messages, this, userConfig),
|
|
195
|
+
new StyleTooOftenUsedNounRule(messages, this, userConfig),
|
|
196
|
+
new StyleTooOftenUsedAdjectiveRule(messages, this, userConfig));
|
|
197
|
+
return allRules;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Java: English#getRelevantLanguageModelRules(ResourceBundle,LanguageModel,UserConfig)
|
|
201
|
+
getRelevantLanguageModelRules(messages, languageModel) {
|
|
202
|
+
// UpperCaseNgramRule, EnglishConfusionProbabilityRule, EnglishNgramProbabilityRule: constructors dereference the language model
|
|
203
|
+
if (languageModel === null || languageModel === undefined) return []; // DEV-026: Java NPE; no model, no model rules
|
|
204
|
+
throw notPortedYet('English#getRelevantLanguageModelRules (ngram rules, DEV-001)');
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// Java: English#getRelevantLanguageModelCapableRules(ResourceBundle,LanguageModel,GlobalConfig,UserConfig,Language,List)
|
|
208
|
+
getRelevantLanguageModelCapableRules(messages, lm, globalConfig, userConfig, motherTongue) {
|
|
209
|
+
if (lm !== null && lm !== undefined && motherTongue !== null && motherTongue !== undefined) {
|
|
210
|
+
const code = motherTongue.getShortCode();
|
|
211
|
+
if (code === 'fr' || code === 'de' || code === 'es' || code === 'nl') {
|
|
212
|
+
throw notPortedYet('English#getRelevantLanguageModelCapableRules (false friend n-gram rules, DEV-001)');
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return [];
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// Java: English#hasNGramFalseFriendRule(Language)
|
|
219
|
+
hasNGramFalseFriendRule(motherTongue) {
|
|
220
|
+
return motherTongue !== null && motherTongue !== undefined && (
|
|
221
|
+
// Note: extend EnglishForL2SpeakersFalseFriendRuleTest.testMessageDetailData() if you add a language here
|
|
222
|
+
motherTongue.getShortCode() === 'de'
|
|
223
|
+
|| motherTongue.getShortCode() === 'fr'
|
|
224
|
+
|| motherTongue.getShortCode() === 'es'
|
|
225
|
+
|| motherTongue.getShortCode() === 'nl');
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Java: English#getOpeningDoubleQuote()
|
|
229
|
+
getOpeningDoubleQuote() {
|
|
230
|
+
return '“';
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Java: English#getClosingDoubleQuote()
|
|
234
|
+
getClosingDoubleQuote() {
|
|
235
|
+
return '”';
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Java: English#getOpeningSingleQuote()
|
|
239
|
+
getOpeningSingleQuote() {
|
|
240
|
+
return '‘';
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Java: English#getClosingSingleQuote()
|
|
244
|
+
getClosingSingleQuote() {
|
|
245
|
+
return '’';
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Java: English#isAdvancedTypographyEnabled()
|
|
249
|
+
isAdvancedTypographyEnabled() {
|
|
250
|
+
return true;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Java: English#getDefaultRulePriorityForStyle()
|
|
254
|
+
getDefaultRulePriorityForStyle() {
|
|
255
|
+
return -50;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Java: English#getPriorityMap()
|
|
259
|
+
getPriorityMap() {
|
|
260
|
+
return id2prio;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Java: English#getPriorityForId(String)
|
|
264
|
+
getPriorityForId(id) {
|
|
265
|
+
const prio = id2prio.get(id);
|
|
266
|
+
if (prio !== null) {
|
|
267
|
+
return prio;
|
|
268
|
+
}
|
|
269
|
+
if (id.startsWith('EN_COMPOUNDS_')) {
|
|
270
|
+
return 2;
|
|
271
|
+
}
|
|
272
|
+
if (id === 'PRP_VBZ') {
|
|
273
|
+
return -2; // prefer other more specific rules (with suggestions)
|
|
274
|
+
}
|
|
275
|
+
if (id.startsWith('CONFUSION_RULE_')) {
|
|
276
|
+
return -20;
|
|
277
|
+
}
|
|
278
|
+
if (id === 'EN_UPPER_CASE_NGRAM') {
|
|
279
|
+
return -12; // prefer other more specific rules (e.g. AI models)
|
|
280
|
+
}
|
|
281
|
+
if (id.startsWith('AI_SPELLING_RULE')) {
|
|
282
|
+
return -9; // higher than MORFOLOGIK_*, for testing
|
|
283
|
+
}
|
|
284
|
+
if (id.startsWith('EN_MULTITOKEN_SPELLING_')) {
|
|
285
|
+
return -9; // higher than MORFOLOGIK_*
|
|
286
|
+
}
|
|
287
|
+
if (id.startsWith('EN_GB_SIMPLE_REPLACE')) {
|
|
288
|
+
return -5; // higher than MORFOLOGIK_*
|
|
289
|
+
}
|
|
290
|
+
if (id.startsWith('EN_US_SIMPLE_REPLACE')) {
|
|
291
|
+
return -5; // higher than MORFOLOGIK_*
|
|
292
|
+
}
|
|
293
|
+
if (id === 'QB_EN_OXFORD') {
|
|
294
|
+
return -51; // MISSING_COMMA_AFTER_YEAR
|
|
295
|
+
}
|
|
296
|
+
if (id.startsWith('EN_SIMPLE_REPLACE')
|
|
297
|
+
&& (id.endsWith('GRAMME') || id.endsWith('GRAMMES'))) {
|
|
298
|
+
return -49; // Higher prio than Oxford rule
|
|
299
|
+
}
|
|
300
|
+
if (id.startsWith('AI_HYDRA_LEO')) { // prefer more specific rules (also speller)
|
|
301
|
+
if (id === 'AI_HYDRA_LEO_MISSING_COMMA') {
|
|
302
|
+
return -51; // prefer comma style rules.
|
|
303
|
+
}
|
|
304
|
+
if (id.startsWith('AI_HYDRA_LEO_CP_YOU_YOUARE')) {
|
|
305
|
+
return -1;
|
|
306
|
+
}
|
|
307
|
+
if (id.startsWith('AI_HYDRA_LEO_CP')) {
|
|
308
|
+
return 2;
|
|
309
|
+
}
|
|
310
|
+
if (id.startsWith('AI_HYDRA_LEO_MISSING_TO')) {
|
|
311
|
+
return -14; // prefer lector, HAVE_PART_AGREEMENT and BEEN_PART_AGREEMENT
|
|
312
|
+
}
|
|
313
|
+
return -11;
|
|
314
|
+
}
|
|
315
|
+
if (id.startsWith('AI_EN_LECTOR')) { // prefer more specific rules (also speller)
|
|
316
|
+
return -11;
|
|
317
|
+
}
|
|
318
|
+
if (FALSE_FRIENDS_PATTERN.matcher(id).matches()) {
|
|
319
|
+
return -21;
|
|
320
|
+
}
|
|
321
|
+
return super.getPriorityForId(id);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// Java: English#hasMinMatchesRules()
|
|
325
|
+
hasMinMatchesRules() {
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// Java: English#createDefaultSpellingRule(ResourceBundle)
|
|
330
|
+
createDefaultSpellingRule(messages) {
|
|
331
|
+
return createComponent('org.languagetool.rules.en.MorfologikAmericanSpellerRule', messages, this, null, []);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// Java: English#filterRuleMatches(List,AnnotatedText,Set)
|
|
335
|
+
filterRuleMatches(ruleMatches) {
|
|
336
|
+
const newRuleMatches = [];
|
|
337
|
+
for (const rm of ruleMatches) {
|
|
338
|
+
const errorStr = rm.getOriginalErrorStr();
|
|
339
|
+
const suggestedReplacements = rm.getSuggestedReplacementObjects();
|
|
340
|
+
const newReplacements = [];
|
|
341
|
+
for (const suggestedReplacement of suggestedReplacements) {
|
|
342
|
+
let newReplStr = suggestedReplacement.getReplacement();
|
|
343
|
+
if (errorStr.length > 2) {
|
|
344
|
+
// add a whitespace when the error is in a contraction and the suggestion is not
|
|
345
|
+
if (errorStr.startsWith("'") && !newReplStr.startsWith("'") && !newReplStr.startsWith('’')
|
|
346
|
+
&& !newReplStr.startsWith(' ')) {
|
|
347
|
+
newReplStr = ` ${newReplStr}`;
|
|
348
|
+
}
|
|
349
|
+
if (errorStr.startsWith("n't") && !newReplStr.startsWith("n't") && !newReplStr.startsWith('n’t')) {
|
|
350
|
+
newReplStr = ` ${newReplStr}`;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
const newSuggestedReplacement = new SuggestedReplacement(suggestedReplacement);
|
|
354
|
+
newSuggestedReplacement.setReplacement(newReplStr);
|
|
355
|
+
if (!newReplacements.some((r) => r.equals(newSuggestedReplacement))) {
|
|
356
|
+
newReplacements.push(newSuggestedReplacement);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
const newMatch = new RuleMatch(rm, newReplacements);
|
|
360
|
+
if (newMatch.getSpecificRuleId().startsWith('EN_SIMPLE_REPLACE')
|
|
361
|
+
&& (newMatch.getSpecificRuleId().endsWith('GRAMME') || newMatch.getSpecificRuleId().endsWith('GRAMMES'))) {
|
|
362
|
+
newMatch.getRule().setLocQualityIssueType(ITSIssueType.LocaleViolation);
|
|
363
|
+
}
|
|
364
|
+
newRuleMatches.push(newMatch);
|
|
365
|
+
}
|
|
366
|
+
return newRuleMatches;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// Java: English#prepareLineForSpeller(String)
|
|
370
|
+
prepareLineForSpeller(line) {
|
|
371
|
+
const parts = javaSplit(line, '#');
|
|
372
|
+
if (parts.length === 0) {
|
|
373
|
+
return [line];
|
|
374
|
+
}
|
|
375
|
+
if (line.includes('+')) {
|
|
376
|
+
// while the morfologik separator is "+", multiwords with '+' can cause undesired results.
|
|
377
|
+
return [''];
|
|
378
|
+
}
|
|
379
|
+
const formTag = javaSplit(parts[0], '\t');
|
|
380
|
+
if (formTag.length === 0) throw new ArrayIndexOutOfBoundsException('Index 0 out of bounds for length 0');
|
|
381
|
+
const form = javaTrim(formTag[0]);
|
|
382
|
+
if (formTag.length > 1) {
|
|
383
|
+
const tag = javaTrim(formTag[1]);
|
|
384
|
+
if (tag.startsWith('NN') || tag.startsWith('JJ')) {
|
|
385
|
+
return [form];
|
|
386
|
+
}
|
|
387
|
+
return [''];
|
|
388
|
+
}
|
|
389
|
+
return [line];
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
// Java: English#getMultitokenSpeller()
|
|
393
|
+
getMultitokenSpeller() {
|
|
394
|
+
return sharedComponent('org.languagetool.rules.en.EnglishMultitokenSpeller');
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
registerClass(English.FQCN, English);
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Java: org.languagetool.language.NewZealandEnglish
|
|
2
|
+
import { createComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
|
|
3
|
+
import { registerClass } from '@valueerror/ltjs-core/src/core/resources/ClassBroker.js';
|
|
4
|
+
import { English } from './English.js';
|
|
5
|
+
import { MorfologikNewZealandSpellerRule } from '../rules/MorfologikNewZealandSpellerRule.js';
|
|
6
|
+
import { NewZealandReplaceRule } from '../rules/NewZealandReplaceRule.js';
|
|
7
|
+
import { UnitConversionRuleImperial } from '../rules/UnitConversionRuleImperial.js';
|
|
8
|
+
|
|
9
|
+
// Java: NewZealandEnglish
|
|
10
|
+
export class NewZealandEnglish extends English {
|
|
11
|
+
static FQCN = 'org.languagetool.language.NewZealandEnglish';
|
|
12
|
+
|
|
13
|
+
// Java: NewZealandEnglish#getCountries()
|
|
14
|
+
getCountries() {
|
|
15
|
+
return ['NZ'];
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// Java: NewZealandEnglish#getName()
|
|
19
|
+
getName() {
|
|
20
|
+
return 'English (New Zealand)';
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Java: NewZealandEnglish#createDefaultSpellingRule(ResourceBundle)
|
|
24
|
+
createDefaultSpellingRule(messages) {
|
|
25
|
+
return createComponent('org.languagetool.rules.en.MorfologikNewZealandSpellerRule', messages, this, null, []);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Java: NewZealandEnglish#getRelevantRules(ResourceBundle,UserConfig,Language,List)
|
|
29
|
+
getRelevantRules(messages, userConfig, motherTongue, altLanguages) {
|
|
30
|
+
const rules = [...super.getRelevantRules(messages, userConfig, motherTongue, altLanguages)];
|
|
31
|
+
rules.push(new NewZealandReplaceRule(messages, '/en/en-NZ/replace.txt'));
|
|
32
|
+
rules.push(new UnitConversionRuleImperial(messages));
|
|
33
|
+
return rules;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Java: NewZealandEnglish#getRelevantLanguageModelCapableRules(ResourceBundle,LanguageModel,GlobalConfig,UserConfig,Language,List)
|
|
37
|
+
getRelevantLanguageModelCapableRules(messages, lm, globalConfig, userConfig, motherTongue, altLanguages) {
|
|
38
|
+
const rules = [...super.getRelevantLanguageModelCapableRules(messages, lm, globalConfig, userConfig, motherTongue, altLanguages)];
|
|
39
|
+
rules.push(new MorfologikNewZealandSpellerRule(messages, this, globalConfig, userConfig, altLanguages, lm, motherTongue));
|
|
40
|
+
return rules;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
registerClass(NewZealandEnglish.FQCN, NewZealandEnglish);
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Java: org.languagetool.language.SouthAfricanEnglish
|
|
2
|
+
import { createComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
|
|
3
|
+
import { registerClass } from '@valueerror/ltjs-core/src/core/resources/ClassBroker.js';
|
|
4
|
+
import { English } from './English.js';
|
|
5
|
+
import { MorfologikSouthAfricanSpellerRule } from '../rules/MorfologikSouthAfricanSpellerRule.js';
|
|
6
|
+
|
|
7
|
+
// Java: SouthAfricanEnglish
|
|
8
|
+
export class SouthAfricanEnglish extends English {
|
|
9
|
+
static FQCN = 'org.languagetool.language.SouthAfricanEnglish';
|
|
10
|
+
|
|
11
|
+
// Java: SouthAfricanEnglish#getCountries()
|
|
12
|
+
getCountries() {
|
|
13
|
+
return ['ZA'];
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Java: SouthAfricanEnglish#getName()
|
|
17
|
+
getName() {
|
|
18
|
+
return 'English (South African)';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Java: SouthAfricanEnglish#createDefaultSpellingRule(ResourceBundle)
|
|
22
|
+
createDefaultSpellingRule(messages) {
|
|
23
|
+
return createComponent('org.languagetool.rules.en.MorfologikSouthAfricanSpellerRule', messages, this, null, []);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Java: SouthAfricanEnglish#getRelevantRules(ResourceBundle,UserConfig,Language,List)
|
|
27
|
+
getRelevantRules(messages, userConfig, motherTongue, altLanguages) {
|
|
28
|
+
const rules = [...super.getRelevantRules(messages, userConfig, motherTongue, altLanguages)];
|
|
29
|
+
return rules;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Java: SouthAfricanEnglish#getRelevantLanguageModelCapableRules(ResourceBundle,LanguageModel,GlobalConfig,UserConfig,Language,List)
|
|
33
|
+
getRelevantLanguageModelCapableRules(messages, lm, globalConfig, userConfig, motherTongue, altLanguages) {
|
|
34
|
+
const rules = [...super.getRelevantLanguageModelCapableRules(messages, lm, globalConfig, userConfig, motherTongue, altLanguages)];
|
|
35
|
+
rules.push(new MorfologikSouthAfricanSpellerRule(messages, this, globalConfig, userConfig, altLanguages, lm, motherTongue));
|
|
36
|
+
return rules;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
registerClass(SouthAfricanEnglish.FQCN, SouthAfricanEnglish);
|