Cleaning up, bugfixes
This commit is contained in:
parent
c2dcb27f8c
commit
31ef3ad935
16
flake.lock
16
flake.lock
|
@ -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": {
|
||||
|
|
|
@ -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
|
||||
];
|
||||
};
|
||||
});
|
||||
|
|
|
@ -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,9 +95,9 @@ 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))\/)*/
|
||||
].map(r => r.source).join(''),'i');
|
||||
/(?:(?<tense>(?:(?:simple|progressive|perfect|perfect[ _]progressive|participle(?![ _]future))[ _])*(?:past|present|future))\/)*/,
|
||||
/(?<verb>[\w\s]+)\//
|
||||
].map(r => r.source).join(''), 'i');
|
||||
|
||||
request.loop(request, {
|
||||
regexp: regexp,
|
||||
|
@ -294,42 +297,32 @@ 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');
|
||||
].map(r => r.source).join(''), 'i');
|
||||
request.loop(request, {
|
||||
regexp: regexp1,
|
||||
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, "");
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -340,28 +333,33 @@ function alt(request) {
|
|||
/(?: (?!\2)(?<conjunction2>and|or) (?!\1|\3)(?:first|second|third))?/,
|
||||
/\/(?<replacement1>[^\/]*)\//,
|
||||
/(?<replacement2>[^\/]*)\//
|
||||
].map(r => r.source).join(''),'i');
|
||||
].map(r => r.source).join(''), 'i');
|
||||
request.loop(request, {
|
||||
regexp: regexp2,
|
||||
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) {
|
||||
return input.replace(params.regexp, vars.replacement2);
|
||||
} 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');
|
||||
].map(r => r.source).join(''), 'i');
|
||||
request.loop(request, {
|
||||
regexp: regexp3,
|
||||
pov: request.options.pov
|
||||
|
@ -384,7 +382,7 @@ function ife(request) {
|
|||
/if\/(?<lhs>[^\/]*) is /,
|
||||
/(?<rhs>[^\/]*)\//,
|
||||
/(?<replacement>[^\/]*)\//
|
||||
].map(r => r.source).join(''),'i');
|
||||
].map(r => r.source).join(''), 'i');
|
||||
request.loop(request, {
|
||||
regexp: regexp1
|
||||
}, (input, params) => {
|
||||
|
@ -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, "");
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -401,9 +399,9 @@ function ife(request) {
|
|||
/(?<rhs>[^\/]*)\//,
|
||||
/(?<replacement>[^\/]*)\//,
|
||||
/(?<else>[^\/]*)\//
|
||||
].map(r => r.source).join(''),'i');
|
||||
].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,19 +415,19 @@ 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]*)\//
|
||||
].map(r => r.source).join(''),'i');
|
||||
/(?<index>[1-9][0-9]*)\//,
|
||||
/(?<target>[^\/]+)\//
|
||||
].map(r => r.source).join(''), 'i');
|
||||
request.loop(request, {
|
||||
regexp: regexp
|
||||
}, (input, params) => {
|
||||
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' }));
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
Loading…
Reference in New Issue