@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,107 @@
|
|
|
1
|
+
// org.languagetool.rules.en.EnglishWordRepeatBeginningRule
|
|
2
|
+
import { WordRepeatBeginningRule } from '@valueerror/ltjs-core/src/core/rules/WordRepeatBeginningRule.js';
|
|
3
|
+
import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
|
|
4
|
+
import { toLowerCase } from '@valueerror/ltjs-core/src/lib/java/strings.js';
|
|
5
|
+
import { JavaHashSet } from '@valueerror/ltjs-core/src/lib/java/collections/JavaHashSet.js';
|
|
6
|
+
|
|
7
|
+
// ==================== ADVERBS ======================
|
|
8
|
+
|
|
9
|
+
// adverbs used to add to what the previous sentence mentioned
|
|
10
|
+
const ADD_ADVERBS = new JavaHashSet();
|
|
11
|
+
|
|
12
|
+
// adverbs used to express contrast to what the previous sentence mentioned
|
|
13
|
+
const CONTRAST_ADVERBS = new JavaHashSet();
|
|
14
|
+
|
|
15
|
+
// adverbs used to express emphasis to what the previous sentence mentioned
|
|
16
|
+
const EMPHASIS_ADVERBS = new JavaHashSet();
|
|
17
|
+
|
|
18
|
+
// adverbs used to explain what the previous sentence mentioned
|
|
19
|
+
const EXPLAIN_ADVERBS = new JavaHashSet();
|
|
20
|
+
|
|
21
|
+
// ==================== EXPRESSIONS ======================
|
|
22
|
+
// the expressions will be used only as additional suggestions
|
|
23
|
+
|
|
24
|
+
// linking expressions that can be used instead of the ADD_ADVERBS
|
|
25
|
+
const ADD_EXPRESSIONS = ['In addition', 'As well as'];
|
|
26
|
+
|
|
27
|
+
// linking expressions that can be used instead of the CONTRAST_ADVERBS
|
|
28
|
+
const CONTRAST_EXPRESSIONS = ['Even so', 'On the other hand'];
|
|
29
|
+
|
|
30
|
+
// Java: EnglishWordRepeatBeginningRule static initializer
|
|
31
|
+
// based on https://www.pinterest.com/pin/229542912245527548/
|
|
32
|
+
ADD_ADVERBS.add('Additionally');
|
|
33
|
+
ADD_ADVERBS.add('Besides');
|
|
34
|
+
ADD_ADVERBS.add('Furthermore');
|
|
35
|
+
ADD_ADVERBS.add('Moreover');
|
|
36
|
+
ADD_ADVERBS.add('Also');
|
|
37
|
+
CONTRAST_ADVERBS.add('Nevertheless');
|
|
38
|
+
CONTRAST_ADVERBS.add('Nonetheless');
|
|
39
|
+
CONTRAST_ADVERBS.add('Alternatively');
|
|
40
|
+
EMPHASIS_ADVERBS.add('Undoubtedly');
|
|
41
|
+
EMPHASIS_ADVERBS.add('Indeed');
|
|
42
|
+
EMPHASIS_ADVERBS.add('Obviously');
|
|
43
|
+
EMPHASIS_ADVERBS.add('Clearly');
|
|
44
|
+
EMPHASIS_ADVERBS.add('Importantly');
|
|
45
|
+
EMPHASIS_ADVERBS.add('Absolutely');
|
|
46
|
+
EMPHASIS_ADVERBS.add('Definitely');
|
|
47
|
+
EXPLAIN_ADVERBS.add('Particularly');
|
|
48
|
+
EXPLAIN_ADVERBS.add('Especially');
|
|
49
|
+
EXPLAIN_ADVERBS.add('Specifically');
|
|
50
|
+
|
|
51
|
+
// Java: EnglishWordRepeatBeginningRule
|
|
52
|
+
export class EnglishWordRepeatBeginningRule extends WordRepeatBeginningRule {
|
|
53
|
+
static FQCN = 'org.languagetool.rules.en.EnglishWordRepeatBeginningRule';
|
|
54
|
+
|
|
55
|
+
// Java: EnglishWordRepeatBeginningRule(ResourceBundle,Language)
|
|
56
|
+
constructor(messages, language) {
|
|
57
|
+
super(messages, language);
|
|
58
|
+
this.addExamplePair(Example.wrong('Moreover, the street is almost entirely residential. <marker>Moreover</marker>, it was named after a poet.'),
|
|
59
|
+
Example.fixed('Moreover, the street is almost entirely residential. <marker>It</marker> was named after a poet.'));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Java: EnglishWordRepeatBeginningRule#getId()
|
|
63
|
+
getId() {
|
|
64
|
+
return 'ENGLISH_WORD_REPEAT_BEGINNING_RULE';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Java: EnglishWordRepeatBeginningRule#isException(String)
|
|
68
|
+
isException(token) {
|
|
69
|
+
return super.isException(token) || token === 'The' || token === 'A' || token === 'An';
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Java: EnglishWordRepeatBeginningRule#isAdverb(AnalyzedTokenReadings)
|
|
73
|
+
isAdverb(token) {
|
|
74
|
+
const tok = token.getToken();
|
|
75
|
+
return ADD_ADVERBS.contains(tok) || CONTRAST_ADVERBS.contains(tok) || EMPHASIS_ADVERBS.contains(tok)
|
|
76
|
+
|| EXPLAIN_ADVERBS.contains(tok);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Java: EnglishWordRepeatBeginningRule#getSuggestions(AnalyzedTokenReadings)
|
|
80
|
+
getSuggestions(token) {
|
|
81
|
+
const tok = token.getToken();
|
|
82
|
+
// the repeated word is a personal pronoun
|
|
83
|
+
if (token.hasPosTag('PRP')) {
|
|
84
|
+
const adaptedToken = tok === 'I' ? tok : toLowerCase(tok);
|
|
85
|
+
return ['Furthermore, ' + adaptedToken, 'Likewise, ' + adaptedToken,
|
|
86
|
+
'Not only that, but ' + adaptedToken];
|
|
87
|
+
} else if (ADD_ADVERBS.contains(tok)) {
|
|
88
|
+
const addSuggestions = this.getDifferentAdverbsOfSameCategory(tok, ADD_ADVERBS);
|
|
89
|
+
addSuggestions.push(...ADD_EXPRESSIONS);
|
|
90
|
+
return addSuggestions;
|
|
91
|
+
} else if (CONTRAST_ADVERBS.contains(tok)) {
|
|
92
|
+
const contrastSuggestions = this.getDifferentAdverbsOfSameCategory(tok, CONTRAST_ADVERBS);
|
|
93
|
+
contrastSuggestions.push(...CONTRAST_EXPRESSIONS);
|
|
94
|
+
return contrastSuggestions;
|
|
95
|
+
} else if (EMPHASIS_ADVERBS.contains(tok)) {
|
|
96
|
+
return this.getDifferentAdverbsOfSameCategory(tok, EMPHASIS_ADVERBS);
|
|
97
|
+
} else if (EXPLAIN_ADVERBS.contains(tok)) {
|
|
98
|
+
return this.getDifferentAdverbsOfSameCategory(tok, EXPLAIN_ADVERBS);
|
|
99
|
+
}
|
|
100
|
+
return [];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Java: EnglishWordRepeatBeginningRule#getDifferentAdverbsOfSameCategory(String,Set)
|
|
104
|
+
getDifferentAdverbsOfSameCategory(adverb, adverbsOfCategory) {
|
|
105
|
+
return [...adverbsOfCategory].filter((adv) => adv !== adverb);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// org.languagetool.rules.en.EnglishWordRepeatRule
|
|
2
|
+
import { Pattern } from '@valueerror/ltjs-core/src/lib/java/regex/index.js';
|
|
3
|
+
import { javaMatches, equalsIgnoreCase } from '@valueerror/ltjs-core/src/lib/java/strings.js';
|
|
4
|
+
import { WordRepeatRule } from '@valueerror/ltjs-core/src/core/rules/WordRepeatRule.js';
|
|
5
|
+
import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
|
|
6
|
+
|
|
7
|
+
const SINGLE_CHAR = Pattern.compile('(?i)^[a-z]$');
|
|
8
|
+
|
|
9
|
+
// plain "repetitionOf(word)" branches of the Java else-if chain, in source order ("wait" only at position 2)
|
|
10
|
+
const REPETITION_WORDS = [
|
|
11
|
+
'aye', 'blah', 'mau', 'uh', 'paw', 'cha', 'yum', 'wop', 'woop', 'fnarr', 'fnar', 'ha', 'omg', 'boo', 'tick', 'twinkle', 'ta', 'la', 'x',
|
|
12
|
+
'hi', 'ho', 'heh', 'jay', 'walla', 'sri', 'hey', 'hah', 'heh', 'oh', 'ouh', 'chop', 'ring', 'beep', 'bleep', 'yeah', 'gout', 'wait',
|
|
13
|
+
'quack', 'meow', 'squawk', 'whoa', 'si', 'honk', 'brum', 'chi', 'santorio', 'lapu', 'chow', 'beep', 'shh', 'yummy', 'boom', 'bye', 'ah',
|
|
14
|
+
'aah', 'bang', 'woof', 'wink', 'yes', 'tsk', 'hush', 'ding', 'choo', 'miu', 'tuk', 'yadda', 'walla', 'doo', 'sapiens', 'tse', 'no', 'Bora',
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
// Java: EnglishWordRepeatRule
|
|
18
|
+
export class EnglishWordRepeatRule extends WordRepeatRule {
|
|
19
|
+
static FQCN = 'org.languagetool.rules.en.EnglishWordRepeatRule';
|
|
20
|
+
|
|
21
|
+
// Java: EnglishWordRepeatRule(ResourceBundle,Language)
|
|
22
|
+
constructor(messages, language) {
|
|
23
|
+
super(messages, language);
|
|
24
|
+
this.addExamplePair(Example.wrong('This <marker>is is</marker> just an example sentence.'),
|
|
25
|
+
Example.fixed('This <marker>is</marker> just an example sentence.'));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Java: EnglishWordRepeatRule#getId()
|
|
29
|
+
getId() {
|
|
30
|
+
return 'ENGLISH_WORD_REPEAT_RULE';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Java: EnglishWordRepeatRule#ignore(AnalyzedTokenReadings[],int)
|
|
34
|
+
ignore(tokens, position) {
|
|
35
|
+
if (position === 0) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
// TODO:
|
|
39
|
+
// What that is is a ...
|
|
40
|
+
// but you you're my best friend ...
|
|
41
|
+
// I'm so so happy
|
|
42
|
+
// I'm very very happy
|
|
43
|
+
const word = tokens[position].getToken();
|
|
44
|
+
if ((this.repetitionOf('did', tokens, position) || this.repetitionOf('do', tokens, position)
|
|
45
|
+
|| this.repetitionOf('does', tokens, position)) && (position + 1 < tokens.length)
|
|
46
|
+
&& equalsIgnoreCase(tokens[position + 1].getToken(), "n't")) {
|
|
47
|
+
return true;
|
|
48
|
+
} else if (this.repetitionOf('her', tokens, position) && this.posIsIn(tokens, position - 2, 'VB', 'VBP', 'VBZ', 'VBG', 'VBD', 'VBN') && this.posIsIn(tokens, position + 1, 'NN', 'NNS', 'NN:U', 'NN:UN', 'NNP')) {
|
|
49
|
+
return true; // "Please pass her her phone."
|
|
50
|
+
} else if (this.repetitionOf('had', tokens, position) && this.posIsIn(tokens, position - 2, 'PRP', 'NN')) {
|
|
51
|
+
return true; // "If I had had time, I would have gone to see him."
|
|
52
|
+
} else if (this.repetitionOf('that', tokens, position) && this.posIsIn(tokens, position + 1, 'MD', 'NN', 'PRP$', 'JJ', 'VBZ', 'VBD')) {
|
|
53
|
+
return true; // "I don't think that that is a problem."
|
|
54
|
+
} else if (this.repetitionOf('can', tokens, position) && this.posIsIn(tokens, position - 1, 'NN')) {
|
|
55
|
+
return true; // "The can can hold the water."
|
|
56
|
+
} else if (this.repetitionOf('hip', tokens, position) && (position + 1 < tokens.length) && equalsIgnoreCase(tokens[position + 1].getToken(), 'hooray')) {
|
|
57
|
+
return true;
|
|
58
|
+
} else if (this.repetitionOf('bam', tokens, position) && (position + 1 < tokens.length) && equalsIgnoreCase(tokens[position + 1].getToken(), 'bigelow')) {
|
|
59
|
+
return true;
|
|
60
|
+
} else if (this.repetitionOf('wild', tokens, position) && (position + 1 < tokens.length) && equalsIgnoreCase(tokens[position + 1].getToken(), 'west')) {
|
|
61
|
+
return true; // In the wild wild west (https://en.wikipedia.org/wiki/Wild_Wild_West)
|
|
62
|
+
} else if (this.repetitionOf('far', tokens, position) && (position + 1 < tokens.length) && equalsIgnoreCase(tokens[position + 1].getToken(), 'away')) {
|
|
63
|
+
return true;
|
|
64
|
+
} else if (this.repetitionOf('so', tokens, position) && (position + 1 < tokens.length) && equalsIgnoreCase(tokens[position + 1].getToken(), 'much')) {
|
|
65
|
+
return true;
|
|
66
|
+
} else if (this.repetitionOf('so', tokens, position) && (position + 1 < tokens.length) && equalsIgnoreCase(tokens[position + 1].getToken(), 'many')) {
|
|
67
|
+
return true;
|
|
68
|
+
} else if (this.repetitionOf('s', tokens, position) && position > 1 && javaMatches(tokens[position - 2].getToken(), "['’`´‘]")) {
|
|
69
|
+
return true; // It's S.T.E.A.M.
|
|
70
|
+
} else if (this.repetitionOf('in', tokens, position) && position > 2 && javaMatches(tokens[position - 3].getToken(), 'log(ged|s)?|sign(ed|s)?')) {
|
|
71
|
+
return true; // log them in in the
|
|
72
|
+
} else if (this.repetitionOf('in', tokens, position) && position > 1 && javaMatches(tokens[position - 2].getToken(), 'log(ged|s)?|sign(ed|s)?')) {
|
|
73
|
+
return true; // log in in the
|
|
74
|
+
} else if (this.repetitionOf('a', tokens, position) && position > 1 && tokens[position - 2].getToken() === '.') {
|
|
75
|
+
return true; // "a.k.a a"
|
|
76
|
+
} else if (this.repetitionOf('on', tokens, position) && position > 1 && tokens[position - 2].getToken() === '.') {
|
|
77
|
+
return true; // "You can contact E.ON on Instagram"
|
|
78
|
+
} else if (equalsIgnoreCase(tokens[position - 1].getToken(), word) && (((position + 1 < tokens.length) && equalsIgnoreCase(tokens[position + 1].getToken(), word)) || (position > 1 && equalsIgnoreCase(tokens[position - 2].getToken(), word)))) {
|
|
79
|
+
// three time word repetition
|
|
80
|
+
return true;
|
|
81
|
+
} else if (SINGLE_CHAR.matcher(tokens[position].getToken()).matches() && position > 1
|
|
82
|
+
&& SINGLE_CHAR.matcher(tokens[position - 2].getToken()).matches()
|
|
83
|
+
&& (position + 1 < tokens.length) && SINGLE_CHAR.matcher(tokens[position + 1].getToken()).matches()) {
|
|
84
|
+
// spelling with spaces in between: "b a s i c a l l y"
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
for (const w of REPETITION_WORDS) {
|
|
88
|
+
if (this.repetitionOf(w, tokens, position) && (w !== 'wait' || position === 2)) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (tokens[position].getToken().endsWith('ay')) {
|
|
93
|
+
if (tokens[position - 1].getToken() === 'may' && tokens[position].getToken() === 'May') {
|
|
94
|
+
return true; // "may May"
|
|
95
|
+
}
|
|
96
|
+
if (tokens[position - 1].getToken() === 'May' && tokens[position].getToken() === 'may') {
|
|
97
|
+
return true; // "May may"
|
|
98
|
+
}
|
|
99
|
+
if (tokens[1].getToken() === 'May' && tokens[2].getToken() === 'May') {
|
|
100
|
+
return true; // "May May" SENT_START
|
|
101
|
+
}
|
|
102
|
+
} else if (tokens[position].getToken().endsWith('ill')) {
|
|
103
|
+
return (position > 0 && tokens[position - 1].getToken() === 'will' && tokens[position].getToken() === 'Will') // will Wills
|
|
104
|
+
|| (tokens[position - 1].getToken() === 'Will' && tokens[position].getToken() === 'will') // Will will ...
|
|
105
|
+
|| (tokens[1].getToken() === 'Will' && tokens[2].getToken() === 'Will'); // "Will Will" SENT_START
|
|
106
|
+
}
|
|
107
|
+
return super.ignore(tokens, position);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Java: EnglishWordRepeatRule#posIsIn(AnalyzedTokenReadings[],int,String...)
|
|
111
|
+
posIsIn(tokens, position, ...posTags) {
|
|
112
|
+
if (position >= 0 && position < tokens.length) {
|
|
113
|
+
for (const posTag of posTags) {
|
|
114
|
+
if (tokens[position].hasPartialPosTag(posTag)) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Java: EnglishWordRepeatRule#repetitionOf(String,AnalyzedTokenReadings[],int)
|
|
123
|
+
repetitionOf(word, tokens, position) {
|
|
124
|
+
return position > 0 && equalsIgnoreCase(tokens[position - 1].getToken(), word) && equalsIgnoreCase(tokens[position].getToken(), word);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// org.languagetool.rules.en.EnglishWrongWordInContextRule
|
|
2
|
+
import { WrongWordInContextRule } from '@valueerror/ltjs-core/src/core/rules/WrongWordInContextRule.js';
|
|
3
|
+
import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
|
|
4
|
+
|
|
5
|
+
// Java: EnglishWrongWordInContextRule
|
|
6
|
+
export class EnglishWrongWordInContextRule extends WrongWordInContextRule {
|
|
7
|
+
static FQCN = 'org.languagetool.rules.en.EnglishWrongWordInContextRule';
|
|
8
|
+
|
|
9
|
+
// Java: EnglishWrongWordInContextRule(ResourceBundle,Language)
|
|
10
|
+
constructor(messages, lang) {
|
|
11
|
+
super(messages, lang);
|
|
12
|
+
this.addExamplePair(Example.wrong('I have <marker>proscribed</marker> you a course of antibiotics.'),
|
|
13
|
+
Example.fixed('I have <marker>prescribed</marker> you a course of antibiotics.'));
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Java: EnglishWrongWordInContextRule#getCategoryString()
|
|
17
|
+
getCategoryString() {
|
|
18
|
+
return 'Commonly Confused Words';
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Java: EnglishWrongWordInContextRule#getId()
|
|
22
|
+
getId() {
|
|
23
|
+
return 'ENGLISH_WRONG_WORD_IN_CONTEXT';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Java: EnglishWrongWordInContextRule#getDescription()
|
|
27
|
+
getDescription() {
|
|
28
|
+
return 'commonly confused words: $match';
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Java: EnglishWrongWordInContextRule#getFilename()
|
|
32
|
+
getFilename() {
|
|
33
|
+
return '/en/wrongWordInContext.txt';
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Java: EnglishWrongWordInContextRule#getMessageString()
|
|
37
|
+
getMessageString() {
|
|
38
|
+
return "Possibly confused word: Did you mean <suggestion>$SUGGESTION</suggestion> instead of '$WRONGWORD'?";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Java: EnglishWrongWordInContextRule#getShortMessageString()
|
|
42
|
+
getShortMessageString() {
|
|
43
|
+
return 'Possibly confused word';
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Java: EnglishWrongWordInContextRule#getLongMessageString()
|
|
47
|
+
getLongMessageString() {
|
|
48
|
+
return "Possibly confused word: Did you mean <suggestion>$SUGGESTION</suggestion> (= $EXPLANATION_SUGGESTION) instead of '$WRONGWORD' (= $EXPLANATION_WRONGWORD)?";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// org.languagetool.rules.en.FindSuggestionsFilter
|
|
2
|
+
import { registerClass } from '@valueerror/ltjs-core/src/core/resources/ClassBroker.js';
|
|
3
|
+
import { NullPointerException } from '@valueerror/ltjs-core/src/lib/java/errors.js';
|
|
4
|
+
import { getDataBroker } from '@valueerror/ltjs-core/src/core/resources/LtStatics.js';
|
|
5
|
+
import { AbstractFindSuggestionsFilter } from '@valueerror/ltjs-core/src/core/rules/AbstractFindSuggestionsFilter.js';
|
|
6
|
+
import { MorfologikSpeller } from '@valueerror/ltjs-core/src/core/rules/spelling/morfologik/MorfologikSpeller.js';
|
|
7
|
+
import { EnglishTagger } from '../tagging/EnglishTagger.js';
|
|
8
|
+
|
|
9
|
+
const DICT_FILENAME = '/en/english.dict';
|
|
10
|
+
let speller = null; // Java: FindSuggestionsFilter#speller (static)
|
|
11
|
+
|
|
12
|
+
// Java: FindSuggestionsFilter
|
|
13
|
+
export class FindSuggestionsFilter extends AbstractFindSuggestionsFilter {
|
|
14
|
+
static FQCN = 'org.languagetool.rules.en.FindSuggestionsFilter';
|
|
15
|
+
static JAVA_ABSTRACT = false;
|
|
16
|
+
static JAVA_CONSTRUCTORS = [{ params: [], text: 'public org.languagetool.rules.en.FindSuggestionsFilter() throws java.io.IOException' }];
|
|
17
|
+
|
|
18
|
+
// Java: FindSuggestionsFilter#FindSuggestionsFilter()
|
|
19
|
+
constructor() {
|
|
20
|
+
super();
|
|
21
|
+
// lazy init
|
|
22
|
+
if (speller === null) {
|
|
23
|
+
if (getDataBroker().resourceExists(DICT_FILENAME)) {
|
|
24
|
+
speller = new MorfologikSpeller(DICT_FILENAME);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Java: FindSuggestionsFilter#getTagger()
|
|
30
|
+
getTagger() {
|
|
31
|
+
return EnglishTagger.INSTANCE;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Java: FindSuggestionsFilter#getSpellingSuggestions(AnalyzedTokenReadings)
|
|
35
|
+
getSpellingSuggestions(atr) {
|
|
36
|
+
if (speller === null) throw new NullPointerException();
|
|
37
|
+
return speller.findSimilarWords(atr.getToken());
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
registerClass(FindSuggestionsFilter.FQCN, FindSuggestionsFilter);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// org.languagetool.rules.en.FutureDateFilter
|
|
2
|
+
import { registerClass } from '@valueerror/ltjs-core/src/core/resources/ClassBroker.js';
|
|
3
|
+
import { AbstractFutureDateFilter } from '@valueerror/ltjs-core/src/core/rules/AbstractFutureDateFilter.js';
|
|
4
|
+
import { DateFilterHelper } from './DateFilterHelper.js';
|
|
5
|
+
|
|
6
|
+
// Java: FutureDateFilter
|
|
7
|
+
export class FutureDateFilter extends AbstractFutureDateFilter {
|
|
8
|
+
static FQCN = 'org.languagetool.rules.en.FutureDateFilter';
|
|
9
|
+
static JAVA_ABSTRACT = false;
|
|
10
|
+
static JAVA_CONSTRUCTORS = [{ params: [], text: 'public org.languagetool.rules.en.FutureDateFilter()' }];
|
|
11
|
+
|
|
12
|
+
dateFilterHelper = new DateFilterHelper();
|
|
13
|
+
|
|
14
|
+
// Java: FutureDateFilter#getMonth(String)
|
|
15
|
+
getMonth(localizedMonth) {
|
|
16
|
+
return this.dateFilterHelper.getMonth(localizedMonth);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Java: FutureDateFilter#getCalendar()
|
|
20
|
+
getCalendar() {
|
|
21
|
+
return this.dateFilterHelper.getCalendar();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
registerClass(FutureDateFilter.FQCN, FutureDateFilter);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// org.languagetool.rules.en.LongSentenceRule
|
|
2
|
+
import { LongSentenceRule as CoreLongSentenceRule } from '@valueerror/ltjs-core/src/core/rules/LongSentenceRule.js';
|
|
3
|
+
import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
|
|
4
|
+
|
|
5
|
+
// Java: LongSentenceRule (en)
|
|
6
|
+
export class LongSentenceRule extends CoreLongSentenceRule {
|
|
7
|
+
static FQCN = 'org.languagetool.rules.en.LongSentenceRule';
|
|
8
|
+
|
|
9
|
+
// Java: LongSentenceRule(ResourceBundle,UserConfig,int)
|
|
10
|
+
constructor(messages, userConfig, defaultWords) {
|
|
11
|
+
super(messages, userConfig, defaultWords);
|
|
12
|
+
this.setUrl(getUrl('https://languagetool.org/insights/post/splitting-long-sentences/'));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Java: LongSentenceRule#getShortMessage()
|
|
16
|
+
getShortMessage() {
|
|
17
|
+
return 'Long sentence';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// org.languagetool.rules.en.MorfologikAmericanSpellerRule
|
|
2
|
+
import { AbstractEnglishSpellerRule } from './AbstractEnglishSpellerRule.js';
|
|
3
|
+
import { VariantInfo } from './VariantInfo.js';
|
|
4
|
+
import { SuggestedReplacement } from '@valueerror/ltjs-core/src/core/rules/model/SuggestedReplacement.js';
|
|
5
|
+
import { registerComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
|
|
6
|
+
import { toLowerCase } from '@valueerror/ltjs-core/src/lib/java/strings.js';
|
|
7
|
+
|
|
8
|
+
const RESOURCE_FILENAME = '/en/hunspell/en_US.dict';
|
|
9
|
+
const LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT = 'en/hunspell/spelling_en-US.txt';
|
|
10
|
+
let BRITISH_ENGLISH = null; // Java: static final Map BRITISH_ENGLISH = loadWordlist("en/en-US-GB.txt", 1), initialised with the class
|
|
11
|
+
|
|
12
|
+
// Java: MorfologikAmericanSpellerRule
|
|
13
|
+
export class MorfologikAmericanSpellerRule extends AbstractEnglishSpellerRule {
|
|
14
|
+
static FQCN = 'org.languagetool.rules.en.MorfologikAmericanSpellerRule';
|
|
15
|
+
static RULE_ID = 'MORFOLOGIK_RULE_EN_US';
|
|
16
|
+
|
|
17
|
+
// Java: MorfologikAmericanSpellerRule(ResourceBundle,Language) / (..., UserConfig, List) / (..., GlobalConfig, UserConfig, List, LanguageModel, Language)
|
|
18
|
+
constructor(messages, language, ...rest) {
|
|
19
|
+
if (BRITISH_ENGLISH === null) BRITISH_ENGLISH = AbstractEnglishSpellerRule.loadWordlist('en/en-US-GB.txt', 1);
|
|
20
|
+
if (rest.length === 0) {
|
|
21
|
+
super(messages, language, null, null, [], null, null);
|
|
22
|
+
} else {
|
|
23
|
+
super(messages, language, ...rest);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Java: MorfologikAmericanSpellerRule#isValidInOtherVariant(String)
|
|
28
|
+
isValidInOtherVariant(word) {
|
|
29
|
+
const otherVariant = BRITISH_ENGLISH.get(toLowerCase(word));
|
|
30
|
+
if (otherVariant !== undefined) {
|
|
31
|
+
return new VariantInfo('British English', otherVariant);
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Java: MorfologikAmericanSpellerRule#getFileName()
|
|
37
|
+
getFileName() {
|
|
38
|
+
return RESOURCE_FILENAME;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Java: MorfologikAmericanSpellerRule#getId()
|
|
42
|
+
getId() {
|
|
43
|
+
return MorfologikAmericanSpellerRule.RULE_ID;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Java: MorfologikAmericanSpellerRule#getLanguageVariantSpellingFileName()
|
|
47
|
+
getLanguageVariantSpellingFileName() {
|
|
48
|
+
return LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Java: MorfologikAmericanSpellerRule#getAdditionalTopSuggestions(List,String)
|
|
52
|
+
getAdditionalTopSuggestions(suggestions, word) {
|
|
53
|
+
let s = null;
|
|
54
|
+
if ('automize' === word) {
|
|
55
|
+
s = ['automate'];
|
|
56
|
+
} else if ('automized' === word) {
|
|
57
|
+
s = ['automated'];
|
|
58
|
+
} else if ('automizing' === word) {
|
|
59
|
+
s = ['automating'];
|
|
60
|
+
} else if ('automizes' === word) {
|
|
61
|
+
s = ['automates'];
|
|
62
|
+
}
|
|
63
|
+
if (s !== null) {
|
|
64
|
+
return SuggestedReplacement.convert(s);
|
|
65
|
+
}
|
|
66
|
+
return super.getAdditionalTopSuggestions(suggestions, word);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
registerComponent(MorfologikAmericanSpellerRule.FQCN, (...args) => new MorfologikAmericanSpellerRule(...args));
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// org.languagetool.rules.en.MorfologikAustralianSpellerRule
|
|
2
|
+
import { AbstractEnglishSpellerRule } from './AbstractEnglishSpellerRule.js';
|
|
3
|
+
import { VariantInfo } from './VariantInfo.js';
|
|
4
|
+
import { registerComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
|
|
5
|
+
import { toLowerCase } from '@valueerror/ltjs-core/src/lib/java/strings.js';
|
|
6
|
+
|
|
7
|
+
const RESOURCE_FILENAME = '/en/hunspell/en_AU.dict';
|
|
8
|
+
const LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT = 'en/hunspell/spelling_en-AU.txt';
|
|
9
|
+
let US_ENGLISH = null; // Java: static final Map US_ENGLISH = loadWordlist("en/en-US-GB.txt", 0), initialised with the class
|
|
10
|
+
|
|
11
|
+
// Java: MorfologikAustralianSpellerRule
|
|
12
|
+
export class MorfologikAustralianSpellerRule extends AbstractEnglishSpellerRule {
|
|
13
|
+
static FQCN = 'org.languagetool.rules.en.MorfologikAustralianSpellerRule';
|
|
14
|
+
|
|
15
|
+
// Java: MorfologikAustralianSpellerRule(ResourceBundle,Language,UserConfig,List) / (ResourceBundle,Language,GlobalConfig,UserConfig,List,LanguageModel,Language)
|
|
16
|
+
constructor(messages, language, ...rest) {
|
|
17
|
+
if (US_ENGLISH === null) US_ENGLISH = AbstractEnglishSpellerRule.loadWordlist('en/en-US-GB.txt', 0);
|
|
18
|
+
super(messages, language, ...rest);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Java: MorfologikAustralianSpellerRule#isValidInOtherVariant(String)
|
|
22
|
+
isValidInOtherVariant(word) {
|
|
23
|
+
const otherVariant = US_ENGLISH.get(toLowerCase(word));
|
|
24
|
+
if (otherVariant !== undefined) {
|
|
25
|
+
return new VariantInfo('American English', otherVariant);
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Java: MorfologikAustralianSpellerRule#getFileName()
|
|
31
|
+
getFileName() {
|
|
32
|
+
return RESOURCE_FILENAME;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Java: MorfologikAustralianSpellerRule#getId()
|
|
36
|
+
getId() {
|
|
37
|
+
return 'MORFOLOGIK_RULE_EN_AU';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Java: MorfologikAustralianSpellerRule#getLanguageVariantSpellingFileName()
|
|
41
|
+
getLanguageVariantSpellingFileName() {
|
|
42
|
+
return LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
registerComponent(MorfologikAustralianSpellerRule.FQCN, (...args) => new MorfologikAustralianSpellerRule(...args));
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// org.languagetool.rules.en.MorfologikBritishSpellerRule
|
|
2
|
+
import { AbstractEnglishSpellerRule } from './AbstractEnglishSpellerRule.js';
|
|
3
|
+
import { VariantInfo } from './VariantInfo.js';
|
|
4
|
+
import { registerComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
|
|
5
|
+
import { toLowerCase } from '@valueerror/ltjs-core/src/lib/java/strings.js';
|
|
6
|
+
|
|
7
|
+
const RESOURCE_FILENAME = '/en/hunspell/en_GB.dict';
|
|
8
|
+
const LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT = 'en/hunspell/spelling_en-GB.txt';
|
|
9
|
+
let US_ENGLISH = null; // Java: static final Map US_ENGLISH = loadWordlist("en/en-US-GB.txt", 0), initialised with the class
|
|
10
|
+
|
|
11
|
+
// Java: MorfologikBritishSpellerRule
|
|
12
|
+
export class MorfologikBritishSpellerRule extends AbstractEnglishSpellerRule {
|
|
13
|
+
static FQCN = 'org.languagetool.rules.en.MorfologikBritishSpellerRule';
|
|
14
|
+
|
|
15
|
+
static RULE_ID = 'MORFOLOGIK_RULE_EN_GB';
|
|
16
|
+
|
|
17
|
+
// Java: MorfologikBritishSpellerRule(ResourceBundle,Language,UserConfig,List) / (ResourceBundle,Language,GlobalConfig,UserConfig,List,LanguageModel,Language)
|
|
18
|
+
constructor(messages, language, ...rest) {
|
|
19
|
+
if (US_ENGLISH === null) US_ENGLISH = AbstractEnglishSpellerRule.loadWordlist('en/en-US-GB.txt', 0);
|
|
20
|
+
super(messages, language, ...rest);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Java: MorfologikBritishSpellerRule#isValidInOtherVariant(String)
|
|
24
|
+
isValidInOtherVariant(word) {
|
|
25
|
+
const otherVariant = US_ENGLISH.get(toLowerCase(word));
|
|
26
|
+
if (otherVariant !== undefined) {
|
|
27
|
+
return new VariantInfo('American English', otherVariant);
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Java: MorfologikBritishSpellerRule#getFileName()
|
|
33
|
+
getFileName() {
|
|
34
|
+
return RESOURCE_FILENAME;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Java: MorfologikBritishSpellerRule#getId()
|
|
38
|
+
getId() {
|
|
39
|
+
return MorfologikBritishSpellerRule.RULE_ID;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Java: MorfologikBritishSpellerRule#getLanguageVariantSpellingFileName()
|
|
43
|
+
getLanguageVariantSpellingFileName() {
|
|
44
|
+
return LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
registerComponent(MorfologikBritishSpellerRule.FQCN, (...args) => new MorfologikBritishSpellerRule(...args));
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// org.languagetool.rules.en.MorfologikCanadianSpellerRule
|
|
2
|
+
import { AbstractEnglishSpellerRule } from './AbstractEnglishSpellerRule.js';
|
|
3
|
+
import { VariantInfo } from './VariantInfo.js';
|
|
4
|
+
import { registerComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
|
|
5
|
+
import { toLowerCase } from '@valueerror/ltjs-core/src/lib/java/strings.js';
|
|
6
|
+
|
|
7
|
+
const RESOURCE_FILENAME = '/en/hunspell/en_CA.dict';
|
|
8
|
+
const LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT = 'en/hunspell/spelling_en-CA.txt';
|
|
9
|
+
let US_ENGLISH = null; // Java: static final Map US_ENGLISH = loadWordlist("en/en-US-GB.txt", 0), initialised with the class
|
|
10
|
+
|
|
11
|
+
// Java: MorfologikCanadianSpellerRule
|
|
12
|
+
export class MorfologikCanadianSpellerRule extends AbstractEnglishSpellerRule {
|
|
13
|
+
static FQCN = 'org.languagetool.rules.en.MorfologikCanadianSpellerRule';
|
|
14
|
+
|
|
15
|
+
// Java: MorfologikCanadianSpellerRule(ResourceBundle,Language,UserConfig,List) / (ResourceBundle,Language,GlobalConfig,UserConfig,List,LanguageModel,Language)
|
|
16
|
+
constructor(messages, language, ...rest) {
|
|
17
|
+
if (US_ENGLISH === null) US_ENGLISH = AbstractEnglishSpellerRule.loadWordlist('en/en-US-GB.txt', 0);
|
|
18
|
+
super(messages, language, ...rest);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Java: MorfologikCanadianSpellerRule#isValidInOtherVariant(String)
|
|
22
|
+
isValidInOtherVariant(word) {
|
|
23
|
+
const otherVariant = US_ENGLISH.get(toLowerCase(word));
|
|
24
|
+
if (otherVariant !== undefined) {
|
|
25
|
+
return new VariantInfo('American English', otherVariant);
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Java: MorfologikCanadianSpellerRule#getFileName()
|
|
31
|
+
getFileName() {
|
|
32
|
+
return RESOURCE_FILENAME;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Java: MorfologikCanadianSpellerRule#getId()
|
|
36
|
+
getId() {
|
|
37
|
+
return 'MORFOLOGIK_RULE_EN_CA';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Java: MorfologikCanadianSpellerRule#getLanguageVariantSpellingFileName()
|
|
41
|
+
getLanguageVariantSpellingFileName() {
|
|
42
|
+
return LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
registerComponent(MorfologikCanadianSpellerRule.FQCN, (...args) => new MorfologikCanadianSpellerRule(...args));
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// org.languagetool.rules.en.MorfologikNewZealandSpellerRule
|
|
2
|
+
import { AbstractEnglishSpellerRule } from './AbstractEnglishSpellerRule.js';
|
|
3
|
+
import { VariantInfo } from './VariantInfo.js';
|
|
4
|
+
import { registerComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
|
|
5
|
+
import { toLowerCase } from '@valueerror/ltjs-core/src/lib/java/strings.js';
|
|
6
|
+
|
|
7
|
+
const RESOURCE_FILENAME = '/en/hunspell/en_NZ.dict';
|
|
8
|
+
const LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT = 'en/hunspell/spelling_en-NZ.txt';
|
|
9
|
+
let US_ENGLISH = null; // Java: static final Map US_ENGLISH = loadWordlist("en/en-US-GB.txt", 0), initialised with the class
|
|
10
|
+
|
|
11
|
+
// Java: MorfologikNewZealandSpellerRule
|
|
12
|
+
export class MorfologikNewZealandSpellerRule extends AbstractEnglishSpellerRule {
|
|
13
|
+
static FQCN = 'org.languagetool.rules.en.MorfologikNewZealandSpellerRule';
|
|
14
|
+
|
|
15
|
+
// Java: MorfologikNewZealandSpellerRule(ResourceBundle,Language,UserConfig,List) / (ResourceBundle,Language,GlobalConfig,UserConfig,List,LanguageModel,Language)
|
|
16
|
+
constructor(messages, language, ...rest) {
|
|
17
|
+
if (US_ENGLISH === null) US_ENGLISH = AbstractEnglishSpellerRule.loadWordlist('en/en-US-GB.txt', 0);
|
|
18
|
+
super(messages, language, ...rest);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Java: MorfologikNewZealandSpellerRule#isValidInOtherVariant(String)
|
|
22
|
+
isValidInOtherVariant(word) {
|
|
23
|
+
const otherVariant = US_ENGLISH.get(toLowerCase(word));
|
|
24
|
+
if (otherVariant !== undefined) {
|
|
25
|
+
return new VariantInfo('American English', otherVariant);
|
|
26
|
+
}
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// Java: MorfologikNewZealandSpellerRule#getFileName()
|
|
31
|
+
getFileName() {
|
|
32
|
+
return RESOURCE_FILENAME;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Java: MorfologikNewZealandSpellerRule#getId()
|
|
36
|
+
getId() {
|
|
37
|
+
return 'MORFOLOGIK_RULE_EN_NZ';
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Java: MorfologikNewZealandSpellerRule#getLanguageVariantSpellingFileName()
|
|
41
|
+
getLanguageVariantSpellingFileName() {
|
|
42
|
+
return LANGUAGE_SPECIFIC_PLAIN_TEXT_DICT;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
registerComponent(MorfologikNewZealandSpellerRule.FQCN, (...args) => new MorfologikNewZealandSpellerRule(...args));
|