Pop-up dictionary browser extension for language learning. Successor to Yomichan. (PERSONAL FORK)
at lambda-fork/main 179 lines 11 kB view raw
1/* 2 * Copyright (C) 2023-2025 Yomitan Authors 3 * Copyright (C) 2020-2022 Yomichan Authors 4 * 5 * This program is free software: you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, either version 3 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program. If not, see <https://www.gnu.org/licenses/>. 17 */ 18 19import {englishTransforms} from '../../ext/js/language/en/english-transforms.js'; 20import {LanguageTransformer} from '../../ext/js/language/language-transformer.js'; 21import {testLanguageTransformer} from '../fixtures/language-transformer-test.js'; 22 23/* eslint-disable @stylistic/no-multi-spaces */ 24const tests = [ 25 { 26 category: 'nouns', 27 valid: true, 28 tests: [ 29 {term: 'cat', source: 'cats', rule: 'ns', reasons: ['plural']}, 30 {term: 'cat', source: 'cat\'s', rule: 'ns', reasons: ['possessive']}, 31 {term: 'cat', source: 'cats\'', rule: 'ns', reasons: ['plural', 'possessive']}, 32 {term: 'cats', source: 'cats\'', rule: 'ns', reasons: ['possessive']}, 33 {term: 'dirt', source: 'dirty', rule: 'ns', reasons: ['-y']}, 34 {term: 'haze', source: 'hazy', rule: 'ns', reasons: ['-y']}, 35 {term: 'bag', source: 'baggy', rule: 'ns', reasons: ['-y']}, 36 {term: 'scum', source: 'scummy', rule: 'ns', reasons: ['-y']}, 37 {term: 'run', source: 'runny', rule: 'ns', reasons: ['-y']}, 38 {term: 'slip', source: 'slippy', rule: 'ns', reasons: ['-y']}, 39 {term: 'star', source: 'starry', rule: 'ns', reasons: ['-y']}, 40 {term: 'gas', source: 'gassy', rule: 'ns', reasons: ['-y']}, 41 {term: 'wit', source: 'witty', rule: 'ns', reasons: ['-y']}, 42 ], 43 }, 44 { 45 category: 'verbs', 46 valid: true, 47 tests: [ 48 {term: 'walk', source: 'walked', rule: 'v', reasons: ['past']}, 49 {term: 'walk', source: 'going to walk', rule: 'v', reasons: ['going-to future']}, 50 {term: 'walk', source: 'will walk', rule: 'v', reasons: ['will future']}, 51 {term: 'walk', source: 'don\'t walk', rule: 'v', reasons: ['imperative negative']}, 52 {term: 'walk', source: 'do not walk', rule: 'v', reasons: ['imperative negative']}, 53 {term: 'hope', source: 'hoped', rule: 'v', reasons: ['past']}, 54 {term: 'try', source: 'tried', rule: 'v', reasons: ['past']}, 55 {term: 'frolic', source: 'frolicked', rule: 'v', reasons: ['past']}, 56 {term: 'rub', source: 'rubbed', rule: 'v', reasons: ['past']}, 57 {term: 'bid', source: 'bidded', rule: 'v', reasons: ['past']}, 58 {term: 'rig', source: 'rigged', rule: 'v', reasons: ['past']}, 59 {term: 'yak', source: 'yakked', rule: 'v', reasons: ['past']}, 60 {term: 'dial', source: 'dialled', rule: 'v', reasons: ['past']}, 61 {term: 'skim', source: 'skimmed', rule: 'v', reasons: ['past']}, 62 {term: 'bin', source: 'binned', rule: 'v', reasons: ['past']}, 63 {term: 'rip', source: 'ripped', rule: 'v', reasons: ['past']}, 64 {term: 'star', source: 'starred', rule: 'v', reasons: ['past']}, 65 {term: 'bus', source: 'bussed', rule: 'v', reasons: ['past']}, 66 {term: 'pit', source: 'pitted', rule: 'v', reasons: ['past']}, 67 {term: 'quiz', source: 'quizzed', rule: 'v', reasons: ['past']}, 68 {term: 'lay', source: 'laid', rule: 'v', reasons: ['past']}, 69 {term: 'pay', source: 'paid', rule: 'v', reasons: ['past']}, 70 {term: 'say', source: 'said', rule: 'v', reasons: ['past']}, 71 {term: 'adorn', source: 'adorn\'d', rule: 'v', reasons: ['past', 'archaic']}, 72 {term: 'walk', source: 'walking', rule: 'v', reasons: ['ing']}, 73 {term: 'drive', source: 'driving', rule: 'v', reasons: ['ing']}, 74 {term: 'lie', source: 'lying', rule: 'v', reasons: ['ing']}, 75 {term: 'panic', source: 'panicking', rule: 'v', reasons: ['ing']}, 76 {term: 'rub', source: 'rubbing', rule: 'v', reasons: ['ing']}, 77 {term: 'bid', source: 'bidding', rule: 'v', reasons: ['ing']}, 78 {term: 'rig', source: 'rigging', rule: 'v', reasons: ['ing']}, 79 {term: 'yak', source: 'yakking', rule: 'v', reasons: ['ing']}, 80 {term: 'dial', source: 'dialling', rule: 'v', reasons: ['ing']}, 81 {term: 'skim', source: 'skimming', rule: 'v', reasons: ['ing']}, 82 {term: 'bin', source: 'binning', rule: 'v', reasons: ['ing']}, 83 {term: 'rip', source: 'ripping', rule: 'v', reasons: ['ing']}, 84 {term: 'star', source: 'starring', rule: 'v', reasons: ['ing']}, 85 {term: 'bus', source: 'bussing', rule: 'v', reasons: ['ing']}, 86 {term: 'pit', source: 'pitting', rule: 'v', reasons: ['ing']}, 87 {term: 'quiz', source: 'quizzing', rule: 'v', reasons: ['ing']}, 88 {term: 'run', source: 'runnin\'', rule: 'v', reasons: ['ing', 'dropped g']}, 89 {term: 'walk', source: 'walks', rule: 'v', reasons: ['3rd pers. sing. pres']}, 90 {term: 'teach', source: 'teaches', rule: 'v', reasons: ['3rd pers. sing. pres']}, 91 {term: 'try', source: 'tries', rule: 'v', reasons: ['3rd pers. sing. pres']}, 92 {term: 'push', source: 'pushy', rule: 'v', reasons: ['-y']}, 93 {term: 'groove', source: 'groovy', rule: 'v', reasons: ['-y']}, 94 {term: 'sag', source: 'saggy', rule: 'v', reasons: ['-y']}, 95 {term: 'swim', source: 'swimmy', rule: 'v', reasons: ['-y']}, 96 {term: 'slip', source: 'slippy', rule: 'v', reasons: ['-y']}, 97 {term: 'blur', source: 'blurry', rule: 'v', reasons: ['-y']}, 98 {term: 'chat', source: 'chatty', rule: 'v', reasons: ['-y']}, 99 {term: 'learn', source: 'unlearn', rule: 'v', reasons: ['un-']}, 100 ], 101 }, 102 { 103 category: 'phrasal verbs', 104 valid: true, 105 tests: [ 106 {term: 'look up', source: 'look something up', rule: 'v_phr', reasons: ['interposed object']}, 107 {term: 'look up', source: 'look it up', rule: 'v_phr', reasons: ['interposed object']}, 108 {term: 'look up', source: 'look one up', rule: 'v_phr', reasons: ['interposed object']}, 109 {term: 'look up', source: 'looking up', rule: 'v_phr', reasons: ['ing']}, 110 {term: 'look up', source: 'looked up', rule: 'v_phr', reasons: ['past']}, 111 {term: 'look up', source: 'looks up', rule: 'v_phr', reasons: ['3rd pers. sing. pres']}, 112 {term: 'look up', source: 'looked something up', rule: 'v_phr', reasons: ['past', 'interposed object']}, 113 ], 114 }, 115 { 116 category: 'adverbs', 117 valid: true, 118 tests: [ 119 {term: 'interestingly', source: 'uninterestingly', rule: 'adj', reasons: ['un-']}, 120 ], 121 }, 122 { 123 category: 'adjectives', 124 valid: true, 125 tests: [ 126 {term: 'funny', source: 'unfunny', rule: 'adj', reasons: ['un-']}, 127 {term: 'cool', source: 'cooler', rule: 'adj', reasons: ['comparative']}, 128 {term: 'subtle', source: 'subtler', rule: 'adj', reasons: ['comparative']}, 129 {term: 'funny', source: 'funnier', rule: 'adj', reasons: ['comparative']}, 130 {term: 'drab', source: 'drabber', rule: 'adj', reasons: ['comparative']}, 131 {term: 'mad', source: 'madder', rule: 'adj', reasons: ['comparative']}, 132 {term: 'big', source: 'bigger', rule: 'adj', reasons: ['comparative']}, 133 {term: 'dim', source: 'dimmer', rule: 'adj', reasons: ['comparative']}, 134 {term: 'tan', source: 'tanner', rule: 'adj', reasons: ['comparative']}, 135 {term: 'hot', source: 'hotter', rule: 'adj', reasons: ['comparative']}, 136 {term: 'cool', source: 'coolest', rule: 'adj', reasons: ['superlative']}, 137 {term: 'subtle', source: 'subtlest', rule: 'adj', reasons: ['superlative']}, 138 {term: 'funny', source: 'funniest', rule: 'adj', reasons: ['superlative']}, 139 {term: 'drab', source: 'drabbest', rule: 'adj', reasons: ['superlative']}, 140 {term: 'mad', source: 'maddest', rule: 'adj', reasons: ['superlative']}, 141 {term: 'big', source: 'biggest', rule: 'adj', reasons: ['superlative']}, 142 {term: 'dim', source: 'dimmest', rule: 'adj', reasons: ['superlative']}, 143 {term: 'tan', source: 'tannest', rule: 'adj', reasons: ['superlative']}, 144 {term: 'hot', source: 'hottest', rule: 'adj', reasons: ['superlative']}, 145 {term: 'quick', source: 'quickly', rule: 'adj', reasons: ['adverb']}, 146 {term: 'happy', source: 'happily', rule: 'adj', reasons: ['adverb']}, 147 {term: 'humble', source: 'humbly', rule: 'adj', reasons: ['adverb']}, 148 ], 149 }, 150 { 151 category: 'invalid deinflections', 152 valid: false, 153 tests: [ 154 {term: 'boss', source: 'bo', rule: 'ns', reasons: ['plural', 'plural']}, 155 {term: 'sta', source: 'stable', rule: 'adj', reasons: ['-able']}, 156 ], 157 }, 158 159 { 160 category: '-able', 161 valid: true, 162 tests: [ 163 {term: 'forget', source: 'unforgettable', rule: 'adj', reasons: ['un-', '-able']}, 164 {term: 'forget', source: 'forgettable', rule: 'adj', reasons: ['-able']}, 165 {term: 'like', source: 'likeable', rule: 'adj', reasons: ['-able']}, 166 {term: 'do', source: 'doable', rule: 'adj', reasons: ['-able']}, 167 {term: 'desire', source: 'desirable', rule: 'adj', reasons: ['-able']}, 168 {term: 'rely', source: 'reliable', rule: 'adj', reasons: ['-able']}, 169 {term: 'move', source: 'movable', rule: 'adj', reasons: ['-able']}, 170 {term: 'adore', source: 'adorable', rule: 'adj', reasons: ['-able']}, 171 {term: 'carry', source: 'carriable', rule: 'adj', reasons: ['-able']}, 172 ], 173 }, 174]; 175/* eslint-enable @stylistic/no-multi-spaces */ 176 177const languageTransformer = new LanguageTransformer(); 178languageTransformer.addDescriptor(englishTransforms); 179testLanguageTransformer(languageTransformer, tests);