implemented basic english spellchecker regex

main
Inga 🏳‍🌈 4 months ago
parent ea48bfa630
commit 06d2c2de91
  1. 43
      src/build-scripts/viteThesaurusRegexPlugin.test.ts
  2. 25
      src/build-scripts/viteThesaurusRegexPlugin.ts

@ -0,0 +1,43 @@
import t from 'tap';
import { getRegexStringForThesaurusPath } from './viteThesaurusRegexPlugin.js';
void t.test('extractWordsFromFile', async (t) => {
const regexString = await getRegexStringForThesaurusPath(
new URL('../../build-resources/th-en-x-basic.dat', import.meta.url),
);
const regex = new RegExp(regexString, 'gi');
const getMatches = (str: string) =>
[...str.matchAll(regex)].map((match) => match[0]);
t.strictSame(
getMatches(
'afterthought airplane another anybody anyhow anyone anything anywhere',
),
[],
);
t.strictSame(
getMatches(
'afterthought airplane another xxx anybody anyhow anyone anything anywhere',
),
['xxx'],
);
t.strictSame(
getMatches(
'xx afterthought airplane another yy anybody anyhow anyone anything anywhere zzzz',
),
['xx', 'yy', 'zzzz'],
);
t.strictSame(getMatches('xx yy zzzz'), ['xx', 'yy', 'zzzz']);
t.strictSame(
getMatches(
"Thing to help people escape really fast if there's a problem and everything is on fire so they decide not to go to space",
),
[],
);
});

@ -0,0 +1,25 @@
import type { PathLike } from 'node:fs';
import { extractWordsFromFile } from './oooThesaurusParser.js';
/*type ViteThesaurusRegexPluginOptions = {
inputOooThesaurusPath: PathLike;
outputRegexPath: string;
};*/
const WORD_CHARACTER_REGEX_FRAGMENT = "[a-zA-Z']";
export const getRegexStringForThesaurusPath = async (
inputOooThesaurusPath: PathLike,
) => {
const words = await extractWordsFromFile(inputOooThesaurusPath);
return `(?<!${WORD_CHARACTER_REGEX_FRAGMENT})${WORD_CHARACTER_REGEX_FRAGMENT}+(?!${WORD_CHARACTER_REGEX_FRAGMENT})(?<!(?<!${WORD_CHARACTER_REGEX_FRAGMENT})(${words.join(
'|',
)}))`;
};
/*export const viteThesaurusRegexPlugin = ({
inputOooThesaurusPath,
outputRegexPath,
}: ViteThesaurusRegexPluginOptions) => {
};
*/
Loading…
Cancel
Save