Cleaning up, bugfixes

This commit is contained in:
Jean Viscogliosi-Pate 2025-08-03 16:35:56 -07:00
parent c2dcb27f8c
commit 31ef3ad935
4 changed files with 61 additions and 59 deletions

View File

@ -2,14 +2,18 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 0,
"narHash": "sha256-463SNPWmz46iLzJKRzO3Q2b0Aurff3U1n0nYItxq7jU=",
"path": "/nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source",
"type": "path"
"lastModified": 1754217164,
"narHash": "sha256-7zupXwqbChmsEyOCUzUbrWVwnUxPc6ExBajgk/Y1oeU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "94bcd9f5bcc94c0a1451ea873e38dddea7360bdc",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {

View File

@ -1,6 +1,6 @@
{
inputs = {
# nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
systems.url = "github:nix-systems/default";
};
@ -13,7 +13,7 @@
devShells = eachSystem (pkgs: {
default = pkgs.mkShell {
buildInputs = [
pkgs.nodejs_22
pkgs.nodejs_24
];
};
});

View File

@ -1,3 +1,6 @@
// TODO time operation
// TODO change to global, time and compare performance
const verbsHelper = require("english-verbs-helper");
const verbsIrregular = require("english-verbs-irregular/dist/verbs.json");
const verbsGerunds = require("english-verbs-gerunds/dist/gerunds.json");
@ -92,8 +95,8 @@ function vrb(request) {
const regexp = new RegExp([
/(?<firstLetter>v)r/,
/(?<category>[nb])\//,
/(?<verb>[\w\s]+)\//,
/(?:(?<tense>(?:(?:simple|progressive|perfect|perfect[ _]progressive|participle(?![ _]future))[ _])*(?:past|present|future))\/)*/
/(?:(?<tense>(?:(?:simple|progressive|perfect|perfect[ _]progressive|participle(?![ _]future))[ _])*(?:past|present|future))\/)*/,
/(?<verb>[\w\s]+)\//
].map(r => r.source).join(''), 'i');
request.loop(request, {
@ -294,31 +297,17 @@ function prn(request) {
/* Replaces specific words indicated in the options */
function also(request) {
Object.entries(options.also).forEach(([searchTerm, replacement]) => {
let searchTermEscaped = searchTerm.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
// Remove whitespace from the front and back
if (searchTermEscaped[0].match(/[a-z]/i)) {
searchTermEscaped = `\\b${searchTermEscaped}`;
}
if (searchTermEscaped[searchTermEscaped.length - 1].match((/[a-z]/i))) {
searchTermEscaped = `${searchTermEscaped}\\b`;
}
const searchTermRegexp = new RegExp(searchTermEscaped);
request.loop(request, {
regexp: searchTermRegexp,
replacement: replacement
}, (input, params) => {
return input.replaceAll(params.regexp, params.replacement);
});
Object.entries(request.options.also).forEach(([key, replacement]) => {
const regexp = new RegExp(RegExp.escape(key), "gi");
request.input = request.input.replaceAll(regexp, replacement);
});
}
/* alt/first and second or third/word1/word2/ becomes "word1" in first and second-person POV but "word2" in third-person */
function alt(request) {
const regexp1 = new RegExp([
/alt\/(?<targetPov>first|second|third)/,
/alt\/(?<targetPov1>first|second|third)/,
/(?: and (?!\1)(?<targetPov2>first|second|third))?/,
/\/(?<replacement>[^\/]*)\//
].map(r => r.source).join(''), 'i');
request.loop(request, {
@ -326,10 +315,14 @@ function alt(request) {
pov: request.options.pov
}, (input, params) => {
const vars = input.match(params.regexp).groups;
if (vars.targetPov == params.pov) {
if (vars.targetPov1.toLowerCase() == params.pov) {
return input.replace(params.regexp, vars.replacement);
} else if (vars.targetPov2 == null) {
return input.replace(params.regexp, "");
} else if (vars.targetPov2.toLowerCase() == params.pov) {
return input.replace(params.regexp, vars.replacement);
} else {
return input.replace(params.regexp, null);
return input.replace(params.regexp, "");
}
});
@ -346,19 +339,24 @@ function alt(request) {
pov: request.options.pov
}, (input, params) => {
const vars = input.match(params.regexp).groups;
if (vars.targetPov1 == params.pov || vars.conjunction1.toLowerCase() == "and" && vars.targetPov2 == params.pov) {
if (vars.targetPov1.toLowerCase() == params.pov) {
return input.replace(params.regexp, vars.replacement1);
} else if (vars.conjunction1.toLowerCase() == "or" && vars.targetPov2 == params.pov) {
} else if (vars.targetPov2.toLowerCase() == params.pov) {
if (vars.conjunction1.toLowerCase() == "and") {
return input.replace(params.regexp, vars.replacement1);
} else {
return input.replace(params.regexp, vars.replacement2);
}
} else if (vars.conjunction2 == null) {
return input.replace(params.regexp, null);
return input.replace(params.regexp, "");
} else {
return input.replace(params.regexp, vars.replacement2);
}
});
const regexp3 = new RegExp([
/alt\/(?<replacement1>[^\/]*)\//,
/alt\/(?:(first|second|third) or (?!\1)(first|second|third) or (?!\1|\2)(?:first|second|third)\/)?/,
/(?<replacement1>[^\/]*)\//,
/(?<replacement2>[^\/]*)\//,
/(?<replacement3>[^\/]*)\//
].map(r => r.source).join(''), 'i');
@ -392,7 +390,7 @@ function ife(request) {
if (vars.lhs === vars.rhs) {
return input.replace(params.regexp, vars.replacement);
} else {
return null;
return input.replace(params.regexp, "");
}
});
@ -403,7 +401,7 @@ function ife(request) {
/(?<else>[^\/]*)\//
].map(r => r.source).join(''), 'i');
request.loop(request, {
regexp: regexp1
regexp: regexp2
}, (input, params) => {
const vars = input.match(params.regexp).groups;
if (vars.lhs === vars.rhs) {
@ -417,10 +415,10 @@ function ife(request) {
/* cut/off first 1/word/ shortens into "ord" */
function cut(request) {
const regexp = new RegExp([
/cut\/(?<target>[^\/]+)\//,
/(?<offonly>off|only) /,
/cut\/(?<offonly>off|only) /,
/(?<firstlast>first|last) /,
/(?<index>[1-9][0-9]*)\//
/(?<index>[1-9][0-9]*)\//,
/(?<target>[^\/]+)\//
].map(r => r.source).join(''), 'i');
request.loop(request, {
regexp: regexp
@ -428,8 +426,8 @@ function cut(request) {
const vars = input.match(params.regexp).groups;
const length = vars.target.length;
let start, end;
if (vars.offonly == "only") {
if (isFirst) { // only first n
if (vars.offonly.toLowerCase() == "only") {
if (vars.firstlast.toLowerCase() == "first") { // only first n
start = 0;
end = Math.min(vars.index, length - 1);
} else { // only last n
@ -437,7 +435,7 @@ function cut(request) {
end = length;
}
} else {
if (vars.firstlast == "first") { // off first n
if (vars.firstlast.toLowerCase() == "first") { // off first n
start = Math.min(vars.index, length - 1);;
end = length;
} else { // off last n
@ -445,7 +443,7 @@ function cut(request) {
end = Math.max(length - vars.index, 1);
}
}
return vars.target.slice(start, end);
return input.replace(params.regexp, vars.target.slice(start, end));
});
}
@ -454,20 +452,20 @@ function cap(request) {
const regexp = new RegExp([
/(?<style>cap|Cap|CAP)\//,
/(?<target>[^\/]+)\//
].map(r => r.source).join(''),'i');
].map(r => r.source).join(''));
request.loop(request, {
regexp: regexp
}, (input, params) => {
const vars = input.match(params.regexp).groups;
const isLowerCase = /c/.test(vars.style.slice(0,1)); // cap
if (isLowerCase) {
return vars.target.toLowerCase();
return input.replace(params.regexp, vars.target.toLowerCase());
} else {
const isStartCase = /a/.test(vars.style.slice(1,2)); // Cap
if (isStartCase) {
return capitalize(vars.target);
return input.replace(params.regexp, capitalize(vars.target));
} else { // CAP
return vars.target.toUpperCase();
return input.replace(params.regexp, vars.target.toUpperCase());
}
}
});
@ -479,7 +477,7 @@ function mrr(request) {
regexp: /mrr\/(?<target>[^\/]+)\//i
}, (input, params) => {
const target = input.match(params.regexp).groups.target;
return target.split('').reverse().join('');
return input.replace(params.regexp, target.split('').reverse().join(''));
});
}
@ -489,7 +487,7 @@ function aan(request) {
regexp: /a\/an (?<target>\w+)/i
}, (input, params) => {
const target = input.match(params.regexp).groups.target;
return articleHelper(target, { numbers: 'colloquial' });
return input.replace(params.regexp, articleHelper(target, { numbers: 'colloquial' }));
});
}

2
package-lock.json generated
View File

@ -7,7 +7,7 @@
"": {
"name": "metamorpov",
"version": "1.0.0",
"license": "ISC",
"license": "GPL-3.0-or-later",
"devDependencies": {
"english-verbs-gerunds": "^3.4.0",
"english-verbs-helper": "^3.4.0",