@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.
Files changed (158) hide show
  1. package/LICENSE +232 -0
  2. package/NOTICE +10 -0
  3. package/README.md +25 -2
  4. package/index.js +34 -0
  5. package/licenses/LGPL-2.1.txt +504 -0
  6. package/licenses/english-pos-dict.pom.xml +135 -0
  7. package/licenses/resource_en_12dicts-readme.html +738 -0
  8. package/licenses/resource_en_agid-readme.txt +340 -0
  9. package/licenses/resource_en_pos-readme.txt +115 -0
  10. package/package.json +60 -4
  11. package/resource-root.js +4 -0
  12. package/resources/META-INF/org/languagetool/language-module.properties +1 -0
  13. package/resources/en-chunker.bin +0 -0
  14. package/resources/en-pos-maxent.bin +0 -0
  15. package/resources/en-token.bin +0 -0
  16. package/resources/org/languagetool/resource/en/12dicts-readme.html +738 -0
  17. package/resources/org/languagetool/resource/en/added.txt +446 -0
  18. package/resources/org/languagetool/resource/en/added_custom.txt +4 -0
  19. package/resources/org/languagetool/resource/en/agid-readme.txt +340 -0
  20. package/resources/org/languagetool/resource/en/compounds.txt +9059 -0
  21. package/resources/org/languagetool/resource/en/confusion_sets.txt +871 -0
  22. package/resources/org/languagetool/resource/en/disambiguation.xml +17238 -0
  23. package/resources/org/languagetool/resource/en/do-not-synthesize.txt +13 -0
  24. package/resources/org/languagetool/resource/en/en-US-GB.txt +4804 -0
  25. package/resources/org/languagetool/resource/en/en.sor +211 -0
  26. package/resources/org/languagetool/resource/en/english.dict +0 -0
  27. package/resources/org/languagetool/resource/en/english.info +8 -0
  28. package/resources/org/languagetool/resource/en/english_synth.dict +0 -0
  29. package/resources/org/languagetool/resource/en/english_synth.info +7 -0
  30. package/resources/org/languagetool/resource/en/english_tags.txt +88 -0
  31. package/resources/org/languagetool/resource/en/hunspell/en_AU.dict +0 -0
  32. package/resources/org/languagetool/resource/en/hunspell/en_AU.info +16 -0
  33. package/resources/org/languagetool/resource/en/hunspell/en_CA.dict +0 -0
  34. package/resources/org/languagetool/resource/en/hunspell/en_CA.info +13 -0
  35. package/resources/org/languagetool/resource/en/hunspell/en_GB.dict +0 -0
  36. package/resources/org/languagetool/resource/en/hunspell/en_GB.info +15 -0
  37. package/resources/org/languagetool/resource/en/hunspell/en_NZ.dict +0 -0
  38. package/resources/org/languagetool/resource/en/hunspell/en_NZ.info +18 -0
  39. package/resources/org/languagetool/resource/en/hunspell/en_US.dict +0 -0
  40. package/resources/org/languagetool/resource/en/hunspell/en_US.info +15 -0
  41. package/resources/org/languagetool/resource/en/hunspell/en_ZA.dict +0 -0
  42. package/resources/org/languagetool/resource/en/hunspell/en_ZA.info +16 -0
  43. package/resources/org/languagetool/resource/en/hunspell/ignore.txt +11070 -0
  44. package/resources/org/languagetool/resource/en/hunspell/prohibit.txt +383 -0
  45. package/resources/org/languagetool/resource/en/hunspell/prohibit_custom.txt +1 -0
  46. package/resources/org/languagetool/resource/en/hunspell/spelling.txt +477 -0
  47. package/resources/org/languagetool/resource/en/hunspell/spelling_custom.txt +1 -0
  48. package/resources/org/languagetool/resource/en/hunspell/spelling_en-AU.txt +34 -0
  49. package/resources/org/languagetool/resource/en/hunspell/spelling_en-CA.txt +28 -0
  50. package/resources/org/languagetool/resource/en/hunspell/spelling_en-GB.txt +44 -0
  51. package/resources/org/languagetool/resource/en/hunspell/spelling_en-NZ.txt +31 -0
  52. package/resources/org/languagetool/resource/en/hunspell/spelling_en-US.txt +41 -0
  53. package/resources/org/languagetool/resource/en/hunspell/spelling_en-ZA.txt +32 -0
  54. package/resources/org/languagetool/resource/en/hunspell/spelling_merged.txt +0 -0
  55. package/resources/org/languagetool/resource/en/multiwords.txt +8210 -0
  56. package/resources/org/languagetool/resource/en/pos-readme.txt +115 -0
  57. package/resources/org/languagetool/resource/en/removed.txt +31 -0
  58. package/resources/org/languagetool/resource/en/removed_custom.txt +4 -0
  59. package/resources/org/languagetool/resource/en/specific_case.txt +5621 -0
  60. package/resources/org/languagetool/resource/en/word_definitions.txt +1510 -0
  61. package/resources/org/languagetool/rules/en/coherency.txt +2501 -0
  62. package/resources/org/languagetool/rules/en/contractions.txt +198 -0
  63. package/resources/org/languagetool/rules/en/det_a.txt +959 -0
  64. package/resources/org/languagetool/rules/en/det_an.txt +4080 -0
  65. package/resources/org/languagetool/rules/en/diacritics.txt +1415 -0
  66. package/resources/org/languagetool/rules/en/en-AU/grammar.xml +171 -0
  67. package/resources/org/languagetool/rules/en/en-CA/grammar.xml +197 -0
  68. package/resources/org/languagetool/rules/en/en-GB/grammar.xml +555 -0
  69. package/resources/org/languagetool/rules/en/en-GB/replace.txt +104 -0
  70. package/resources/org/languagetool/rules/en/en-GB/style.xml +302 -0
  71. package/resources/org/languagetool/rules/en/en-NZ/grammar.xml +171 -0
  72. package/resources/org/languagetool/rules/en/en-NZ/replace.txt +5 -0
  73. package/resources/org/languagetool/rules/en/en-US/grammar.xml +913 -0
  74. package/resources/org/languagetool/rules/en/en-US/replace.txt +74 -0
  75. package/resources/org/languagetool/rules/en/en-US/style.xml +524 -0
  76. package/resources/org/languagetool/rules/en/grammar-l2-de.xml +227 -0
  77. package/resources/org/languagetool/rules/en/grammar-l2-fr.xml +39 -0
  78. package/resources/org/languagetool/rules/en/grammar.xml +142537 -0
  79. package/resources/org/languagetool/rules/en/redundancies.txt +866 -0
  80. package/resources/org/languagetool/rules/en/remote-rule-filters.xml +3622 -0
  81. package/resources/org/languagetool/rules/en/replace.txt +221 -0
  82. package/resources/org/languagetool/rules/en/replace_custom.txt +7 -0
  83. package/resources/org/languagetool/rules/en/replace_profanity.txt +540 -0
  84. package/resources/org/languagetool/rules/en/style.xml +12556 -0
  85. package/resources/org/languagetool/rules/en/synonyms.txt +42 -0
  86. package/resources/org/languagetool/rules/en/wordiness.txt +1061 -0
  87. package/resources/org/languagetool/rules/en/wrongWordInContext.txt +14 -0
  88. package/src/lang/en/chunking/EnglishChunkFilter.js +108 -0
  89. package/src/lang/en/chunking/EnglishChunker.js +135 -0
  90. package/src/lang/en/language/AmericanEnglish.js +73 -0
  91. package/src/lang/en/language/AustralianEnglish.js +42 -0
  92. package/src/lang/en/language/BritishEnglish.js +91 -0
  93. package/src/lang/en/language/CanadianEnglish.js +70 -0
  94. package/src/lang/en/language/English.js +398 -0
  95. package/src/lang/en/language/NewZealandEnglish.js +44 -0
  96. package/src/lang/en/language/SouthAfricanEnglish.js +40 -0
  97. package/src/lang/en/language/id2prioBritishEnglish.js +6 -0
  98. package/src/lang/en/language/id2prioEnglish.js +333 -0
  99. package/src/lang/en/rules/AbstractEnglishSpellerRule.js +677 -0
  100. package/src/lang/en/rules/AbstractEnglishSpellerRuleData.js +778 -0
  101. package/src/lang/en/rules/AdvancedSynthesizerFilter.js +12 -0
  102. package/src/lang/en/rules/AdverbFilter.js +538 -0
  103. package/src/lang/en/rules/AmericanReplaceRule.js +57 -0
  104. package/src/lang/en/rules/AvsAnData.js +37 -0
  105. package/src/lang/en/rules/AvsAnRule.js +182 -0
  106. package/src/lang/en/rules/BritishReplaceRule.js +57 -0
  107. package/src/lang/en/rules/CompoundRule.js +150 -0
  108. package/src/lang/en/rules/ConsistentApostrophesRule.js +87 -0
  109. package/src/lang/en/rules/ContractionSpellingRule.js +64 -0
  110. package/src/lang/en/rules/DateCheckFilter.js +58 -0
  111. package/src/lang/en/rules/DateFilterHelper.js +51 -0
  112. package/src/lang/en/rules/EnglishConvertToSentenceCaseFilter.js +17 -0
  113. package/src/lang/en/rules/EnglishDashRule.js +42 -0
  114. package/src/lang/en/rules/EnglishDiacriticsRule.js +67 -0
  115. package/src/lang/en/rules/EnglishMultitokenSpeller.js +15 -0
  116. package/src/lang/en/rules/EnglishNumberInWordFilter.js +38 -0
  117. package/src/lang/en/rules/EnglishPartialPosTagFilter.js +29 -0
  118. package/src/lang/en/rules/EnglishPlainEnglishRule.js +67 -0
  119. package/src/lang/en/rules/EnglishRedundancyRule.js +67 -0
  120. package/src/lang/en/rules/EnglishRepeatedWordsRule.js +212 -0
  121. package/src/lang/en/rules/EnglishSpecificCaseRule.js +47 -0
  122. package/src/lang/en/rules/EnglishSuppressMisspelledSuggestionsFilter.js +12 -0
  123. package/src/lang/en/rules/EnglishUnpairedBracketsRule.js +25 -0
  124. package/src/lang/en/rules/EnglishUnpairedQuotesRule.js +41 -0
  125. package/src/lang/en/rules/EnglishWordRepeatBeginningRule.js +107 -0
  126. package/src/lang/en/rules/EnglishWordRepeatRule.js +126 -0
  127. package/src/lang/en/rules/EnglishWrongWordInContextRule.js +50 -0
  128. package/src/lang/en/rules/FindSuggestionsFilter.js +41 -0
  129. package/src/lang/en/rules/FutureDateFilter.js +25 -0
  130. package/src/lang/en/rules/LongSentenceRule.js +19 -0
  131. package/src/lang/en/rules/MorfologikAmericanSpellerRule.js +69 -0
  132. package/src/lang/en/rules/MorfologikAustralianSpellerRule.js +45 -0
  133. package/src/lang/en/rules/MorfologikBritishSpellerRule.js +47 -0
  134. package/src/lang/en/rules/MorfologikCanadianSpellerRule.js +45 -0
  135. package/src/lang/en/rules/MorfologikNewZealandSpellerRule.js +45 -0
  136. package/src/lang/en/rules/MorfologikSouthAfricanSpellerRule.js +45 -0
  137. package/src/lang/en/rules/NewYearDateFilter.js +25 -0
  138. package/src/lang/en/rules/NewZealandReplaceRule.js +56 -0
  139. package/src/lang/en/rules/NoDisambiguationEnglishPartialPosTagFilter.js +24 -0
  140. package/src/lang/en/rules/OrdinalSuffixFilter.js +33 -0
  141. package/src/lang/en/rules/SimpleReplaceProfanityRule.js +55 -0
  142. package/src/lang/en/rules/SimpleReplaceRule.js +46 -0
  143. package/src/lang/en/rules/StyleTooOftenUsedAdjectiveRule.js +58 -0
  144. package/src/lang/en/rules/StyleTooOftenUsedNounRule.js +58 -0
  145. package/src/lang/en/rules/StyleTooOftenUsedVerbRule.js +58 -0
  146. package/src/lang/en/rules/UnitConversionRule.js +47 -0
  147. package/src/lang/en/rules/UnitConversionRuleImperial.js +57 -0
  148. package/src/lang/en/rules/UnitConversionRuleUS.js +62 -0
  149. package/src/lang/en/rules/VariantInfo.js +23 -0
  150. package/src/lang/en/rules/WordCoherencyRule.js +40 -0
  151. package/src/lang/en/rules/YMDDateCheckFilter.js +25 -0
  152. package/src/lang/en/rules/YMDNewYearDateFilter.js +25 -0
  153. package/src/lang/en/rules/translation/BeoLingusTranslator.js +357 -0
  154. package/src/lang/en/rules/translation/Inflector.js +72 -0
  155. package/src/lang/en/synthesis/EnglishSynthesizer.js +109 -0
  156. package/src/lang/en/tagging/EnglishHybridDisambiguator.js +28 -0
  157. package/src/lang/en/tagging/EnglishTagger.js +78 -0
  158. package/src/lang/en/tokenizers/EnglishWordTokenizer.js +113 -0
@@ -0,0 +1,42 @@
1
+ // org.languagetool.rules.en.EnglishDashRule
2
+ import { AbstractDashRule } from '@valueerror/ltjs-core/src/core/rules/AbstractDashRule.js';
3
+ import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
4
+ import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
5
+
6
+ let trie = null; // Java: EnglishDashRule#trie (static, loaded once)
7
+
8
+ // Java: EnglishDashRule
9
+ export class EnglishDashRule extends AbstractDashRule {
10
+ static FQCN = 'org.languagetool.rules.en.EnglishDashRule';
11
+
12
+ // Java: EnglishDashRule(ResourceBundle)
13
+ constructor(messages) {
14
+ super(messages);
15
+ this.addExamplePair(Example.wrong("I'll buy a new <marker>T—shirt</marker>."),
16
+ Example.fixed("I'll buy a new <marker>T-shirt</marker>."));
17
+ this.setUrl(getUrl('https://languagetool.org/insights/post/hyphen/'));
18
+ }
19
+
20
+ // Java: EnglishDashRule#getId()
21
+ getId() {
22
+ return 'EN_DASH_RULE';
23
+ }
24
+
25
+ // Java: EnglishDashRule#getDescription()
26
+ getDescription() {
27
+ return "Checks if hyphenated words were spelled with dashes (e.g., 'T — shirt' instead 'T-shirt').";
28
+ }
29
+
30
+ // Java: EnglishDashRule#getMessage()
31
+ getMessage() {
32
+ return 'A dash was used instead of a hyphen.';
33
+ }
34
+
35
+ // Java: EnglishDashRule#getCompoundsData()
36
+ getCompoundsData() {
37
+ if (trie === null) {
38
+ trie = AbstractDashRule.loadCompoundFile('/en/compounds.txt');
39
+ }
40
+ return trie;
41
+ }
42
+ }
@@ -0,0 +1,67 @@
1
+ // org.languagetool.rules.en.EnglishDiacriticsRule
2
+ import { AbstractSimpleReplaceRule2 } from '@valueerror/ltjs-core/src/core/rules/AbstractSimpleReplaceRule2.js';
3
+ import { Categories } from '@valueerror/ltjs-core/src/core/rules/model/Category.js';
4
+ import { ITSIssueType } from '@valueerror/ltjs-core/src/core/rules/model/ITSIssueType.js';
5
+ import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
6
+ import { Locale } from '@valueerror/ltjs-core/src/lib/java/Locale.js';
7
+ import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
8
+ import { English } from '../language/English.js';
9
+
10
+ const FILE_NAME = '/en/diacritics.txt';
11
+ const EN_LOCALE = new Locale('en'); // locale used on case-conversion
12
+
13
+ // Java: EnglishDiacriticsRule
14
+ export class EnglishDiacriticsRule extends AbstractSimpleReplaceRule2 {
15
+ static FQCN = 'org.languagetool.rules.en.EnglishDiacriticsRule';
16
+ static EN_DIACRITICS_REPLACE = 'EN_DIACRITICS_REPLACE_ORTHOGRAPHY';
17
+
18
+ // Java: EnglishDiacriticsRule#getFileNames()
19
+ getFileNames() {
20
+ return [FILE_NAME];
21
+ }
22
+
23
+ // Java: EnglishDiacriticsRule(ResourceBundle)
24
+ constructor(messages) {
25
+ super(messages, new English());
26
+ this.useSubRuleSpecificIds();
27
+ this.setCategory(Categories.TYPOS.getCategory(messages));
28
+ this.setLocQualityIssueType(ITSIssueType.Misspelling);
29
+ this.addExamplePair(Example.wrong('<marker>blase</marker>'),
30
+ Example.fixed('<marker>blasé</marker>'));
31
+ }
32
+
33
+ // Java: EnglishDiacriticsRule#getId()
34
+ getId() {
35
+ return EnglishDiacriticsRule.EN_DIACRITICS_REPLACE;
36
+ }
37
+
38
+ // Java: EnglishDiacriticsRule#getDescription()
39
+ getDescription() {
40
+ return "Suggest diacritics for '$match'";
41
+ }
42
+
43
+ // Java: EnglishDiacriticsRule#getShort()
44
+ getShort() {
45
+ return 'The original word has a diacritic';
46
+ }
47
+
48
+ // Java: EnglishDiacriticsRule#getMessage()
49
+ getMessage() {
50
+ return "'$match' is an imported foreign name or expression, which originally has a diacritic.";
51
+ }
52
+
53
+ // Java: EnglishDiacriticsRule#getSuggestionsSeparator()
54
+ getSuggestionsSeparator() {
55
+ return ' or ';
56
+ }
57
+
58
+ // Java: EnglishDiacriticsRule#getUrl()
59
+ getUrl() {
60
+ return getUrl('https://en.wikipedia.org/wiki/English_terms_with_diacritical_marks');
61
+ }
62
+
63
+ // Java: EnglishDiacriticsRule#getLocale()
64
+ getLocale() {
65
+ return EN_LOCALE;
66
+ }
67
+ }
@@ -0,0 +1,15 @@
1
+ // org.languagetool.rules.en.EnglishMultitokenSpeller
2
+ import { MultitokenSpeller } from '@valueerror/ltjs-core/src/core/rules/spelling/multitoken/MultitokenSpeller.js';
3
+ import { Languages } from '@valueerror/ltjs-core/src/core/Languages.js';
4
+ import { registerComponent } from '@valueerror/ltjs-core/src/core/language/components.js';
5
+
6
+ // Java: EnglishMultitokenSpeller (INSTANCE is the shared component 'org.languagetool.rules.en.EnglishMultitokenSpeller')
7
+ export class EnglishMultitokenSpeller extends MultitokenSpeller {
8
+ static FQCN = 'org.languagetool.rules.en.EnglishMultitokenSpeller';
9
+
10
+ // Java: EnglishMultitokenSpeller()
11
+ constructor() {
12
+ super(Languages.getLanguageForShortCode('en'), ['/en/multiwords.txt', '/spelling_global.txt']); // , "/en/hyphenated_words.txt"
13
+ }
14
+ }
15
+ registerComponent(EnglishMultitokenSpeller.FQCN, () => new EnglishMultitokenSpeller());
@@ -0,0 +1,38 @@
1
+ // org.languagetool.rules.en.EnglishNumberInWordFilter
2
+ import { registerClass } from '@valueerror/ltjs-core/src/core/resources/ClassBroker.js';
3
+ import { Locale } from '@valueerror/ltjs-core/src/lib/java/Locale.js';
4
+ import { MESSAGE_BUNDLE } from '@valueerror/ltjs-core/src/core/JLanguageToolConstants.js';
5
+ import { getDataBroker } from '@valueerror/ltjs-core/src/core/resources/LtStatics.js';
6
+ import { AbstractNumberInWordFilter } from '@valueerror/ltjs-core/src/core/rules/AbstractNumberInWordFilter.js';
7
+ import { AmericanEnglish } from '../language/AmericanEnglish.js';
8
+ import { MorfologikAmericanSpellerRule } from './MorfologikAmericanSpellerRule.js';
9
+
10
+ let englishSpellerRule = null; // Java: EnglishNumberInWordFilter#englishSpellerRule (static)
11
+
12
+ // Java: EnglishNumberInWordFilter
13
+ export class EnglishNumberInWordFilter extends AbstractNumberInWordFilter {
14
+ static FQCN = 'org.languagetool.rules.en.EnglishNumberInWordFilter';
15
+ static JAVA_ABSTRACT = false;
16
+ static JAVA_CONSTRUCTORS = [{ params: [], text: 'public org.languagetool.rules.en.EnglishNumberInWordFilter() throws java.io.IOException' }];
17
+
18
+ // Java: EnglishNumberInWordFilter#EnglishNumberInWordFilter()
19
+ constructor() {
20
+ super(AmericanEnglish.getInstance());
21
+ const messages = getDataBroker().getResourceBundle(MESSAGE_BUNDLE, new Locale(this.language.getShortCode()));
22
+ if (englishSpellerRule === null) {
23
+ englishSpellerRule = new MorfologikAmericanSpellerRule(messages, AmericanEnglish.getInstance());
24
+ }
25
+ }
26
+
27
+ // Java: EnglishNumberInWordFilter#isMisspelled(String)
28
+ isMisspelled(word) {
29
+ return englishSpellerRule.isMisspelled(word);
30
+ }
31
+
32
+ // Java: EnglishNumberInWordFilter#getSuggestions(String)
33
+ getSuggestions(word) {
34
+ return englishSpellerRule.getSpellingSuggestions(word);
35
+ }
36
+ }
37
+
38
+ registerClass(EnglishNumberInWordFilter.FQCN, EnglishNumberInWordFilter);
@@ -0,0 +1,29 @@
1
+ // org.languagetool.rules.en.EnglishPartialPosTagFilter
2
+ import { registerClass } from '@valueerror/ltjs-core/src/core/resources/ClassBroker.js';
3
+ import { Languages } from '@valueerror/ltjs-core/src/core/Languages.js';
4
+ import { AnalyzedSentence } from '@valueerror/ltjs-core/src/core/AnalyzedSentence.js';
5
+ import { IOException, RuntimeException } from '@valueerror/ltjs-core/src/lib/java/errors.js';
6
+ import { PartialPosTagFilter } from '@valueerror/ltjs-core/src/core/rules/PartialPosTagFilter.js';
7
+
8
+ // Java: EnglishPartialPosTagFilter
9
+ export class EnglishPartialPosTagFilter extends PartialPosTagFilter {
10
+ static FQCN = 'org.languagetool.rules.en.EnglishPartialPosTagFilter';
11
+ static JAVA_ABSTRACT = false;
12
+ static JAVA_CONSTRUCTORS = [{ params: [], text: 'public org.languagetool.rules.en.EnglishPartialPosTagFilter()' }];
13
+
14
+ // Java: EnglishPartialPosTagFilter#tag(String)
15
+ tag(token) {
16
+ try {
17
+ const englishLanguage = Languages.getLanguageForShortCode('en');
18
+ const tags = englishLanguage.getTagger().tag([token]);
19
+ const atr = [...tags];
20
+ const disambiguated = englishLanguage.getDisambiguator().disambiguate(new AnalyzedSentence(atr));
21
+ return [...disambiguated.getTokens()];
22
+ } catch (e) {
23
+ if (e instanceof IOException) throw new RuntimeException("Could not tag and disambiguate '" + token + "'", e);
24
+ throw e;
25
+ }
26
+ }
27
+ }
28
+
29
+ registerClass(EnglishPartialPosTagFilter.FQCN, EnglishPartialPosTagFilter);
@@ -0,0 +1,67 @@
1
+ // org.languagetool.rules.en.EnglishPlainEnglishRule
2
+ import { AbstractSimpleReplaceRule2 } from '@valueerror/ltjs-core/src/core/rules/AbstractSimpleReplaceRule2.js';
3
+ import { Categories } from '@valueerror/ltjs-core/src/core/rules/model/Category.js';
4
+ import { ITSIssueType } from '@valueerror/ltjs-core/src/core/rules/model/ITSIssueType.js';
5
+ import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
6
+ import { Locale } from '@valueerror/ltjs-core/src/lib/java/Locale.js';
7
+ import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
8
+ import { English } from '../language/English.js';
9
+
10
+ const FILE_NAME = '/en/wordiness.txt';
11
+ const EN_LOCALE = new Locale('en'); // locale used on case-conversion
12
+
13
+ // Java: EnglishPlainEnglishRule
14
+ export class EnglishPlainEnglishRule extends AbstractSimpleReplaceRule2 {
15
+ static FQCN = 'org.languagetool.rules.en.EnglishPlainEnglishRule';
16
+ static EN_PLAIN_ENGLISH_REPLACE = 'EN_PLAIN_ENGLISH_REPLACE';
17
+
18
+ // Java: EnglishPlainEnglishRule#getFileNames()
19
+ getFileNames() {
20
+ return [FILE_NAME];
21
+ }
22
+
23
+ // Java: EnglishPlainEnglishRule(ResourceBundle)
24
+ constructor(messages) {
25
+ super(messages, new English());
26
+ this.setDefaultOff(); // reactivate after feature freeze
27
+ this.setCategory(Categories.PLAIN_ENGLISH.getCategory(messages));
28
+ this.setLocQualityIssueType(ITSIssueType.Style);
29
+ this.addExamplePair(Example.wrong('<marker>fatal outcome</marker>'),
30
+ Example.fixed('<marker>death</marker>'));
31
+ }
32
+
33
+ // Java: EnglishPlainEnglishRule#getId()
34
+ getId() {
35
+ return EnglishPlainEnglishRule.EN_PLAIN_ENGLISH_REPLACE;
36
+ }
37
+
38
+ // Java: EnglishPlainEnglishRule#getDescription()
39
+ getDescription() {
40
+ return '1. Wordiness (General)';
41
+ }
42
+
43
+ // Java: EnglishPlainEnglishRule#getShort()
44
+ getShort() {
45
+ return 'Wordiness';
46
+ }
47
+
48
+ // Java: EnglishPlainEnglishRule#getMessage()
49
+ getMessage() {
50
+ return "'$match' is a wordy or complex expression. In some cases, it might be preferable to use $suggestions.";
51
+ }
52
+
53
+ // Java: EnglishPlainEnglishRule#getSuggestionsSeparator()
54
+ getSuggestionsSeparator() {
55
+ return ' or ';
56
+ }
57
+
58
+ // Java: EnglishPlainEnglishRule#getUrl()
59
+ getUrl() {
60
+ return getUrl('https://en.wikipedia.org/wiki/List_of_plain_English_words_and_phrases');
61
+ }
62
+
63
+ // Java: EnglishPlainEnglishRule#getLocale()
64
+ getLocale() {
65
+ return EN_LOCALE;
66
+ }
67
+ }
@@ -0,0 +1,67 @@
1
+ // org.languagetool.rules.en.EnglishRedundancyRule
2
+ import { AbstractSimpleReplaceRule2 } from '@valueerror/ltjs-core/src/core/rules/AbstractSimpleReplaceRule2.js';
3
+ import { Categories } from '@valueerror/ltjs-core/src/core/rules/model/Category.js';
4
+ import { ITSIssueType } from '@valueerror/ltjs-core/src/core/rules/model/ITSIssueType.js';
5
+ import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
6
+ import { Locale } from '@valueerror/ltjs-core/src/lib/java/Locale.js';
7
+ import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
8
+ import { English } from '../language/English.js';
9
+
10
+ const FILE_NAME = '/en/redundancies.txt';
11
+ const EN_LOCALE = new Locale('en'); // locale used on case-conversion
12
+
13
+ // Java: EnglishRedundancyRule
14
+ export class EnglishRedundancyRule extends AbstractSimpleReplaceRule2 {
15
+ static FQCN = 'org.languagetool.rules.en.EnglishRedundancyRule';
16
+ static EN_REDUNDANCY_REPLACE = 'EN_REDUNDANCY_REPLACE';
17
+
18
+ // Java: EnglishRedundancyRule#getFileNames()
19
+ getFileNames() {
20
+ return [FILE_NAME];
21
+ }
22
+
23
+ // Java: EnglishRedundancyRule(ResourceBundle)
24
+ constructor(messages) {
25
+ super(messages, new English());
26
+ this.setCategory(Categories.REDUNDANCY.getCategory(messages));
27
+ this.setLocQualityIssueType(ITSIssueType.Style);
28
+ this.setDefaultOff(); // see #1997
29
+ this.addExamplePair(Example.wrong('<marker>tuna fish</marker>'),
30
+ Example.fixed('<marker>tuna</marker>'));
31
+ }
32
+
33
+ // Java: EnglishRedundancyRule#getId()
34
+ getId() {
35
+ return EnglishRedundancyRule.EN_REDUNDANCY_REPLACE;
36
+ }
37
+
38
+ // Java: EnglishRedundancyRule#getDescription()
39
+ getDescription() {
40
+ return '1. Redundancy (General)';
41
+ }
42
+
43
+ // Java: EnglishRedundancyRule#getShort()
44
+ getShort() {
45
+ return 'Redundancy';
46
+ }
47
+
48
+ // Java: EnglishRedundancyRule#getMessage()
49
+ getMessage() {
50
+ return "'$match' is a redundancy. In some cases, it might be preferable to use $suggestions";
51
+ }
52
+
53
+ // Java: EnglishRedundancyRule#getSuggestionsSeparator()
54
+ getSuggestionsSeparator() {
55
+ return ' or ';
56
+ }
57
+
58
+ // Java: EnglishRedundancyRule#getUrl()
59
+ getUrl() {
60
+ return getUrl('https://en.wikipedia.org/wiki/Redundancy_(linguistics)');
61
+ }
62
+
63
+ // Java: EnglishRedundancyRule#getLocale()
64
+ getLocale() {
65
+ return EN_LOCALE;
66
+ }
67
+ }
@@ -0,0 +1,212 @@
1
+ // org.languagetool.rules.en.EnglishRepeatedWordsRule
2
+ import { AbstractRepeatedWordsRule } from '@valueerror/ltjs-core/src/core/rules/AbstractRepeatedWordsRule.js';
3
+ import { Rule } from '@valueerror/ltjs-core/src/core/rules/model/Rule.js';
4
+ import { Tag } from '@valueerror/ltjs-core/src/core/rules/model/Tag.js';
5
+ import { PatternTokenBuilder } from '@valueerror/ltjs-core/src/core/patterns/PatternTokenBuilder.js';
6
+ import { token, tokenRegex, posRegex, pos } from '@valueerror/ltjs-core/src/core/patterns/PatternRuleBuilderHelper.js';
7
+ import '@valueerror/ltjs-core/src/core/disambiguation/DisambiguationPatternRule.js';
8
+ import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
9
+ import { getClassBroker } from '@valueerror/ltjs-core/src/core/resources/LtStatics.js';
10
+ import { EnglishSynthesizer } from '../synthesis/EnglishSynthesizer.js';
11
+
12
+ let wordsToCheck = null; // Java: static wordsToCheck = loadWords("/en/synonyms.txt")
13
+
14
+ // Java: EnglishRepeatedWordsRule#ANTI_PATTERNS (static field, built here on first use)
15
+ function antiPatternList() {
16
+ return [
17
+
18
+ [
19
+ new PatternTokenBuilder().csToken("need").matchInflectedForms().build(), // "I still need -> require to sign in"
20
+ token("to")
21
+ ],
22
+
23
+ [
24
+ new PatternTokenBuilder().tokenRegex("solve(s|d|ing)?").setSkip(3).build(), // "solve the problem" is a unique collocation
25
+ tokenRegex("problems?") // "solve the issue|concern|difficulty" sounds bizarre
26
+ ], // lots of disables in Matomo
27
+
28
+ [
29
+ posRegex("SENT_START|PCT"), // "No problem, I'm not in a rush."
30
+ token("no"),
31
+ token("problem"),
32
+ pos("PCT")
33
+ ],
34
+
35
+ [
36
+ tokenRegex("math|word"), // "math/word problem"
37
+ tokenRegex("problems?")
38
+ ],
39
+
40
+ [
41
+ tokenRegex("as"), // "doesn't apply to the group as a whole"
42
+ tokenRegex("a"),
43
+ tokenRegex("whole")
44
+ ],
45
+
46
+ [
47
+ token("more"),
48
+ token("often"),
49
+ token("than"),
50
+ token("not")
51
+ ],
52
+
53
+ [
54
+ token("often"),
55
+ token("times")
56
+ ],
57
+
58
+ [
59
+ tokenRegex("details?|facts?|it|journals?|questions?|research|results?|study|studies|this|these|those|which"),
60
+ new PatternTokenBuilder().pos("RB").min(0).build(),
61
+ new PatternTokenBuilder().csToken("suggest").matchInflectedForms().build()
62
+ ],
63
+
64
+ [
65
+ new PatternTokenBuilder().csToken("form").matchInflectedForms().build(), // "form in the bloodstream"
66
+ posRegex("IN|PCT|RP|TO|SENT_END")
67
+ ],
68
+
69
+ [
70
+ new PatternTokenBuilder().tokenRegex("bonds?|crystals?|ions?|rocks?|.*valence").setSkip(10).build(),
71
+ new PatternTokenBuilder().csToken("form").matchInflectedForms().build()
72
+ ],
73
+
74
+ [
75
+ new PatternTokenBuilder().tokenRegex("form(s|ed|ing)?").setSkip(10).build(),
76
+ tokenRegex("bonds?|crystals?|ions?|rocks?|.*valence")
77
+ ],
78
+
79
+ [
80
+ token("interesting"),
81
+ tokenRegex("facts?|things?")
82
+ ],
83
+
84
+ [
85
+ token("several"),
86
+ tokenRegex("hundreds?|thousands?|millions?")
87
+ ],
88
+
89
+ [
90
+ token("must"),
91
+ token("be"),
92
+ token("nice")
93
+ ],
94
+
95
+ [
96
+ token("nice"),
97
+ token("day")
98
+ ],
99
+
100
+ [
101
+ token("nice"),
102
+ token("to"),
103
+ new PatternTokenBuilder().token("meet").min(0).build(),
104
+ posRegex("PRP_O.*")
105
+ ],
106
+
107
+ [
108
+ new PatternTokenBuilder().csToken("be").matchInflectedForms().build(), // nice and plump
109
+ token("nice"),
110
+ token("and"),
111
+ pos("JJ"),
112
+ posRegex("PCT|SENT_END")
113
+ ],
114
+
115
+ [
116
+ posRegex("P?DT|PRP$.*"), // the proposed agreement
117
+ token("proposed"),
118
+ posRegex("N.*")
119
+ ],
120
+
121
+ [
122
+ new PatternTokenBuilder().csToken("propose").matchInflectedForms().build(),
123
+ tokenRegex("to|marriage")
124
+ ],
125
+
126
+ [
127
+ token("too"),
128
+ token("literally")
129
+ ],
130
+
131
+ [
132
+ token("literally"),
133
+ token("and"),
134
+ token("figuratively")
135
+ ],
136
+
137
+ [
138
+ token("literally"),
139
+ token("everything")
140
+ ],
141
+
142
+ [
143
+ token("literally"),
144
+ posRegex("PCT|SENT_END")
145
+ ],
146
+
147
+ [
148
+ posRegex("CC"), // "Or maybe it's because I have eyes that see!"
149
+ token("maybe")
150
+ ]
151
+
152
+ ];
153
+ }
154
+
155
+ // Java: EnglishRepeatedWordsRule
156
+ export class EnglishRepeatedWordsRule extends AbstractRepeatedWordsRule {
157
+ static FQCN = 'org.languagetool.rules.en.EnglishRepeatedWordsRule';
158
+
159
+ // Java: EnglishRepeatedWordsRule#getAntiPatterns()
160
+ getAntiPatterns() {
161
+ return this.antiPatterns();
162
+ }
163
+
164
+ // Java: EnglishRepeatedWordsRule(ResourceBundle)
165
+ constructor(messages) {
166
+ super(messages, getClassBroker().forName('org.languagetool.language.AmericanEnglish').getInstance());
167
+ if (wordsToCheck === null) wordsToCheck = AbstractRepeatedWordsRule.loadWords('/en/synonyms.txt');
168
+ this.setTags([Tag.picky]);
169
+ this.antiPatterns = Rule.cacheAntiPatterns(getClassBroker().forName('org.languagetool.language.AmericanEnglish').getInstance(), antiPatternList());
170
+ const id = this.getId();
171
+ if (id === 'EN_REPEATEDWORDS_DEFINITELY') {
172
+ this.setUrl(getUrl('https://languagetool.org/insights/post/i-agree-synonyms/'));
173
+ }
174
+ if (id === 'EN_REPEATEDWORDS_CHOOSE') {
175
+ this.setUrl(getUrl('https://languagetool.org/insights/post/choose-vs-chose/'));
176
+ }
177
+ // super.setDefaultTempOff();
178
+ }
179
+
180
+ // Java: EnglishRepeatedWordsRule#getMessage()
181
+ getMessage() {
182
+ return 'This word has been used in one of the immediately preceding sentences. Using a synonym could make your text more interesting to read, unless the repetition is intentional.';
183
+ }
184
+
185
+ // Java: EnglishRepeatedWordsRule#getDescription()
186
+ getDescription() {
187
+ return 'Suggest synonyms for repeated words.';
188
+ }
189
+
190
+ // Java: EnglishRepeatedWordsRule#getWordsToCheck()
191
+ getWordsToCheck() {
192
+ return wordsToCheck;
193
+ }
194
+
195
+ // Java: EnglishRepeatedWordsRule#getShortMessage()
196
+ getShortMessage() {
197
+ return 'Style: repeated word';
198
+ }
199
+
200
+ // Java: EnglishRepeatedWordsRule#getSynthesizer()
201
+ getSynthesizer() {
202
+ return EnglishSynthesizer.INSTANCE;
203
+ }
204
+
205
+ // Java: EnglishRepeatedWordsRule#isException(AnalyzedTokenReadings[],int,boolean,boolean,boolean)
206
+ isException(tokens, i, sentStart, isCapitalized, isAllUppercase) {
207
+ if (isAllUppercase || (isCapitalized && !sentStart)) {
208
+ return true;
209
+ }
210
+ return tokens[i].hasPosTagStartingWith('NNP');
211
+ }
212
+ }
@@ -0,0 +1,47 @@
1
+ // org.languagetool.rules.en.EnglishSpecificCaseRule
2
+ import { AbstractSpecificCaseRule } from '@valueerror/ltjs-core/src/core/rules/AbstractSpecificCaseRule.js';
3
+ import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
4
+ import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
5
+
6
+ // Java: EnglishSpecificCaseRule
7
+ export class EnglishSpecificCaseRule extends AbstractSpecificCaseRule {
8
+ static FQCN = 'org.languagetool.rules.en.EnglishSpecificCaseRule';
9
+
10
+ // Java: EnglishSpecificCaseRule#getPhrasesPath()
11
+ getPhrasesPath() {
12
+ return '/en/specific_case.txt';
13
+ }
14
+
15
+ // Java: EnglishSpecificCaseRule#getInitialCapitalMessage()
16
+ getInitialCapitalMessage() {
17
+ return 'If the term is a proper noun, use initial capitals.';
18
+ }
19
+
20
+ // Java: EnglishSpecificCaseRule#getOtherCapitalizationMessage()
21
+ getOtherCapitalizationMessage() {
22
+ return 'If the term is a proper noun, use the suggested capitalization.';
23
+ }
24
+
25
+ // Java: EnglishSpecificCaseRule#getShortMessage()
26
+ getShortMessage() {
27
+ return 'Proper noun';
28
+ }
29
+
30
+ // Java: EnglishSpecificCaseRule(ResourceBundle)
31
+ constructor(messages) {
32
+ super(messages);
33
+ this.setUrl(getUrl('https://languagetool.org/insights/post/spelling-capital-letters/'));
34
+ this.addExamplePair(Example.wrong('I really like <marker>Harry potter</marker>.'),
35
+ Example.fixed('I really like <marker>Harry Potter</marker>.'));
36
+ }
37
+
38
+ // Java: EnglishSpecificCaseRule#getId()
39
+ getId() {
40
+ return 'EN_SPECIFIC_CASE';
41
+ }
42
+
43
+ // Java: EnglishSpecificCaseRule#getDescription()
44
+ getDescription() {
45
+ return 'Checks upper/lower case spelling of some proper nouns';
46
+ }
47
+ }
@@ -0,0 +1,12 @@
1
+ // org.languagetool.rules.en.EnglishSuppressMisspelledSuggestionsFilter
2
+ import { registerClass } from '@valueerror/ltjs-core/src/core/resources/ClassBroker.js';
3
+ import { AbstractSuppressMisspelledSuggestionsFilter } from '@valueerror/ltjs-core/src/core/rules/AbstractSuppressMisspelledSuggestionsFilter.js';
4
+
5
+ // Java: EnglishSuppressMisspelledSuggestionsFilter
6
+ export class EnglishSuppressMisspelledSuggestionsFilter extends AbstractSuppressMisspelledSuggestionsFilter {
7
+ static FQCN = 'org.languagetool.rules.en.EnglishSuppressMisspelledSuggestionsFilter';
8
+ static JAVA_ABSTRACT = false;
9
+ static JAVA_CONSTRUCTORS = [{ params: [], text: 'public org.languagetool.rules.en.EnglishSuppressMisspelledSuggestionsFilter() throws java.io.IOException' }];
10
+ }
11
+
12
+ registerClass(EnglishSuppressMisspelledSuggestionsFilter.FQCN, EnglishSuppressMisspelledSuggestionsFilter);
@@ -0,0 +1,25 @@
1
+ // org.languagetool.rules.en.EnglishUnpairedBracketsRule
2
+ import { GenericUnpairedBracketsRule } from '@valueerror/ltjs-core/src/core/rules/GenericUnpairedBracketsRule.js';
3
+ import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
4
+ import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
5
+
6
+ const EN_START_SYMBOLS = ['[', '(', '{'];
7
+ const EN_END_SYMBOLS = [']', ')', '}'];
8
+
9
+ // Java: EnglishUnpairedBracketsRule
10
+ export class EnglishUnpairedBracketsRule extends GenericUnpairedBracketsRule {
11
+ static FQCN = 'org.languagetool.rules.en.EnglishUnpairedBracketsRule';
12
+
13
+ // Java: EnglishUnpairedBracketsRule(ResourceBundle,Language)
14
+ constructor(messages) {
15
+ super(messages, EN_START_SYMBOLS, EN_END_SYMBOLS);
16
+ this.setUrl(getUrl('https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses'));
17
+ this.addExamplePair(Example.wrong('He lived in a <marker>(</marker>large house.'),
18
+ Example.fixed('He lived in a <marker>(</marker>large<marker>)</marker> house.'));
19
+ }
20
+
21
+ // Java: EnglishUnpairedBracketsRule#getId()
22
+ getId() {
23
+ return 'EN_UNPAIRED_BRACKETS';
24
+ }
25
+ }
@@ -0,0 +1,41 @@
1
+ // org.languagetool.rules.en.EnglishUnpairedQuotesRule
2
+ import { GenericUnpairedQuotesRule } from '@valueerror/ltjs-core/src/core/rules/GenericUnpairedQuotesRule.js';
3
+ import { Example } from '@valueerror/ltjs-core/src/core/rules/model/Examples.js';
4
+ import { getUrl } from '@valueerror/ltjs-core/src/core/Tools.js';
5
+
6
+ const EN_START_SYMBOLS = ['“', '"', "'", '‘'];
7
+ const EN_END_SYMBOLS = ['”', '"', "'", '’'];
8
+
9
+ // Java: EnglishUnpairedQuotesRule
10
+ export class EnglishUnpairedQuotesRule extends GenericUnpairedQuotesRule {
11
+ static FQCN = 'org.languagetool.rules.en.EnglishUnpairedQuotesRule';
12
+
13
+ // Java: EnglishUnpairedQuotesRule(ResourceBundle,Language)
14
+ constructor(messages) {
15
+ super(messages, EN_START_SYMBOLS, EN_END_SYMBOLS);
16
+ this.setUrl(getUrl('https://languagetool.org/insights/post/punctuation-guide/#what-are-quotation-marks'));
17
+ this.addExamplePair(Example.wrong('"I\'m over here,<marker></marker> she said.'),
18
+ Example.fixed('"I\'m over here,<marker>"</marker> she said.'));
19
+ }
20
+
21
+ // Java: EnglishUnpairedQuotesRule#getId()
22
+ getId() {
23
+ return 'EN_UNPAIRED_QUOTES';
24
+ }
25
+
26
+ // Java: EnglishUnpairedQuotesRule#isNotBeginningApostrophe(AnalyzedTokenReadings[],int)
27
+ isNotBeginningApostrophe(tokens, i) {
28
+ if (tokens[i].hasPosTag('_apostrophe_contraction_') || tokens[i].hasPosTag('POS') || tokens[i].hasPosTag('NNP')) {
29
+ return false;
30
+ }
31
+ return true;
32
+ }
33
+
34
+ // Java: EnglishUnpairedQuotesRule#isNotEndingApostrophe(AnalyzedTokenReadings[],int)
35
+ isNotEndingApostrophe(tokens, i) {
36
+ if (tokens[i].hasPosTag('_apostrophe_contraction_') || tokens[i].hasPosTag('POS') || tokens[i].hasPosTag('NNP')) {
37
+ return false;
38
+ }
39
+ return true;
40
+ }
41
+ }