Cleaning up, bugfixes
This commit is contained in:
parent
c2dcb27f8c
commit
31ef3ad935
16
flake.lock
16
flake.lock
|
@ -2,14 +2,18 @@
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 0,
|
"lastModified": 1754217164,
|
||||||
"narHash": "sha256-463SNPWmz46iLzJKRzO3Q2b0Aurff3U1n0nYItxq7jU=",
|
"narHash": "sha256-7zupXwqbChmsEyOCUzUbrWVwnUxPc6ExBajgk/Y1oeU=",
|
||||||
"path": "/nix/store/yw6kg4rb9v8s3ypjbpspig5r81m4lr5s-source",
|
"owner": "NixOS",
|
||||||
"type": "path"
|
"repo": "nixpkgs",
|
||||||
|
"rev": "94bcd9f5bcc94c0a1451ea873e38dddea7360bdc",
|
||||||
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"id": "nixpkgs",
|
"owner": "NixOS",
|
||||||
"type": "indirect"
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": {
|
"root": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
# nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||||
systems.url = "github:nix-systems/default";
|
systems.url = "github:nix-systems/default";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
devShells = eachSystem (pkgs: {
|
devShells = eachSystem (pkgs: {
|
||||||
default = pkgs.mkShell {
|
default = pkgs.mkShell {
|
||||||
buildInputs = [
|
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 verbsHelper = require("english-verbs-helper");
|
||||||
const verbsIrregular = require("english-verbs-irregular/dist/verbs.json");
|
const verbsIrregular = require("english-verbs-irregular/dist/verbs.json");
|
||||||
const verbsGerunds = require("english-verbs-gerunds/dist/gerunds.json");
|
const verbsGerunds = require("english-verbs-gerunds/dist/gerunds.json");
|
||||||
|
@ -92,9 +95,9 @@ function vrb(request) {
|
||||||
const regexp = new RegExp([
|
const regexp = new RegExp([
|
||||||
/(?<firstLetter>v)r/,
|
/(?<firstLetter>v)r/,
|
||||||
/(?<category>[nb])\//,
|
/(?<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');
|
].map(r => r.source).join(''), 'i');
|
||||||
|
|
||||||
request.loop(request, {
|
request.loop(request, {
|
||||||
regexp: regexp,
|
regexp: regexp,
|
||||||
|
@ -294,42 +297,32 @@ function prn(request) {
|
||||||
|
|
||||||
/* Replaces specific words indicated in the options */
|
/* Replaces specific words indicated in the options */
|
||||||
function also(request) {
|
function also(request) {
|
||||||
Object.entries(options.also).forEach(([searchTerm, replacement]) => {
|
Object.entries(request.options.also).forEach(([key, replacement]) => {
|
||||||
let searchTermEscaped = searchTerm.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
|
const regexp = new RegExp(RegExp.escape(key), "gi");
|
||||||
|
request.input = request.input.replaceAll(regexp, replacement);
|
||||||
// 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);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/* alt/first and second or third/word1/word2/ becomes "word1" in first and second-person POV but "word2" in third-person */
|
/* alt/first and second or third/word1/word2/ becomes "word1" in first and second-person POV but "word2" in third-person */
|
||||||
function alt(request) {
|
function alt(request) {
|
||||||
const regexp1 = new RegExp([
|
const regexp1 = new RegExp([
|
||||||
/alt\/(?<targetPov>first|second|third)/,
|
/alt\/(?<targetPov1>first|second|third)/,
|
||||||
|
/(?: and (?!\1)(?<targetPov2>first|second|third))?/,
|
||||||
/\/(?<replacement>[^\/]*)\//
|
/\/(?<replacement>[^\/]*)\//
|
||||||
].map(r => r.source).join(''),'i');
|
].map(r => r.source).join(''), 'i');
|
||||||
request.loop(request, {
|
request.loop(request, {
|
||||||
regexp: regexp1,
|
regexp: regexp1,
|
||||||
pov: request.options.pov
|
pov: request.options.pov
|
||||||
}, (input, params) => {
|
}, (input, params) => {
|
||||||
const vars = input.match(params.regexp).groups;
|
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);
|
return input.replace(params.regexp, vars.replacement);
|
||||||
} else {
|
} 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))?/,
|
/(?: (?!\2)(?<conjunction2>and|or) (?!\1|\3)(?:first|second|third))?/,
|
||||||
/\/(?<replacement1>[^\/]*)\//,
|
/\/(?<replacement1>[^\/]*)\//,
|
||||||
/(?<replacement2>[^\/]*)\//
|
/(?<replacement2>[^\/]*)\//
|
||||||
].map(r => r.source).join(''),'i');
|
].map(r => r.source).join(''), 'i');
|
||||||
request.loop(request, {
|
request.loop(request, {
|
||||||
regexp: regexp2,
|
regexp: regexp2,
|
||||||
pov: request.options.pov
|
pov: request.options.pov
|
||||||
}, (input, params) => {
|
}, (input, params) => {
|
||||||
const vars = input.match(params.regexp).groups;
|
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);
|
return input.replace(params.regexp, vars.replacement1);
|
||||||
} else if (vars.conjunction1.toLowerCase() == "or" && vars.targetPov2 == params.pov) {
|
} else if (vars.targetPov2.toLowerCase() == params.pov) {
|
||||||
return input.replace(params.regexp, vars.replacement2);
|
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) {
|
} else if (vars.conjunction2 == null) {
|
||||||
return input.replace(params.regexp, null);
|
return input.replace(params.regexp, "");
|
||||||
} else {
|
} else {
|
||||||
return input.replace(params.regexp, vars.replacement2);
|
return input.replace(params.regexp, vars.replacement2);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const regexp3 = new RegExp([
|
const regexp3 = new RegExp([
|
||||||
/alt\/(?<replacement1>[^\/]*)\//,
|
/alt\/(?:(first|second|third) or (?!\1)(first|second|third) or (?!\1|\2)(?:first|second|third)\/)?/,
|
||||||
|
/(?<replacement1>[^\/]*)\//,
|
||||||
/(?<replacement2>[^\/]*)\//,
|
/(?<replacement2>[^\/]*)\//,
|
||||||
/(?<replacement3>[^\/]*)\//
|
/(?<replacement3>[^\/]*)\//
|
||||||
].map(r => r.source).join(''),'i');
|
].map(r => r.source).join(''), 'i');
|
||||||
request.loop(request, {
|
request.loop(request, {
|
||||||
regexp: regexp3,
|
regexp: regexp3,
|
||||||
pov: request.options.pov
|
pov: request.options.pov
|
||||||
|
@ -384,7 +382,7 @@ function ife(request) {
|
||||||
/if\/(?<lhs>[^\/]*) is /,
|
/if\/(?<lhs>[^\/]*) is /,
|
||||||
/(?<rhs>[^\/]*)\//,
|
/(?<rhs>[^\/]*)\//,
|
||||||
/(?<replacement>[^\/]*)\//
|
/(?<replacement>[^\/]*)\//
|
||||||
].map(r => r.source).join(''),'i');
|
].map(r => r.source).join(''), 'i');
|
||||||
request.loop(request, {
|
request.loop(request, {
|
||||||
regexp: regexp1
|
regexp: regexp1
|
||||||
}, (input, params) => {
|
}, (input, params) => {
|
||||||
|
@ -392,7 +390,7 @@ function ife(request) {
|
||||||
if (vars.lhs === vars.rhs) {
|
if (vars.lhs === vars.rhs) {
|
||||||
return input.replace(params.regexp, vars.replacement);
|
return input.replace(params.regexp, vars.replacement);
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return input.replace(params.regexp, "");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -401,9 +399,9 @@ function ife(request) {
|
||||||
/(?<rhs>[^\/]*)\//,
|
/(?<rhs>[^\/]*)\//,
|
||||||
/(?<replacement>[^\/]*)\//,
|
/(?<replacement>[^\/]*)\//,
|
||||||
/(?<else>[^\/]*)\//
|
/(?<else>[^\/]*)\//
|
||||||
].map(r => r.source).join(''),'i');
|
].map(r => r.source).join(''), 'i');
|
||||||
request.loop(request, {
|
request.loop(request, {
|
||||||
regexp: regexp1
|
regexp: regexp2
|
||||||
}, (input, params) => {
|
}, (input, params) => {
|
||||||
const vars = input.match(params.regexp).groups;
|
const vars = input.match(params.regexp).groups;
|
||||||
if (vars.lhs === vars.rhs) {
|
if (vars.lhs === vars.rhs) {
|
||||||
|
@ -417,19 +415,19 @@ function ife(request) {
|
||||||
/* cut/off first 1/word/ shortens into "ord" */
|
/* cut/off first 1/word/ shortens into "ord" */
|
||||||
function cut(request) {
|
function cut(request) {
|
||||||
const regexp = new RegExp([
|
const regexp = new RegExp([
|
||||||
/cut\/(?<target>[^\/]+)\//,
|
/cut\/(?<offonly>off|only) /,
|
||||||
/(?<offonly>off|only) /,
|
|
||||||
/(?<firstlast>first|last) /,
|
/(?<firstlast>first|last) /,
|
||||||
/(?<index>[1-9][0-9]*)\//
|
/(?<index>[1-9][0-9]*)\//,
|
||||||
].map(r => r.source).join(''),'i');
|
/(?<target>[^\/]+)\//
|
||||||
|
].map(r => r.source).join(''), 'i');
|
||||||
request.loop(request, {
|
request.loop(request, {
|
||||||
regexp: regexp
|
regexp: regexp
|
||||||
}, (input, params) => {
|
}, (input, params) => {
|
||||||
const vars = input.match(params.regexp).groups;
|
const vars = input.match(params.regexp).groups;
|
||||||
const length = vars.target.length;
|
const length = vars.target.length;
|
||||||
let start, end;
|
let start, end;
|
||||||
if (vars.offonly == "only") {
|
if (vars.offonly.toLowerCase() == "only") {
|
||||||
if (isFirst) { // only first n
|
if (vars.firstlast.toLowerCase() == "first") { // only first n
|
||||||
start = 0;
|
start = 0;
|
||||||
end = Math.min(vars.index, length - 1);
|
end = Math.min(vars.index, length - 1);
|
||||||
} else { // only last n
|
} else { // only last n
|
||||||
|
@ -437,7 +435,7 @@ function cut(request) {
|
||||||
end = length;
|
end = length;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (vars.firstlast == "first") { // off first n
|
if (vars.firstlast.toLowerCase() == "first") { // off first n
|
||||||
start = Math.min(vars.index, length - 1);;
|
start = Math.min(vars.index, length - 1);;
|
||||||
end = length;
|
end = length;
|
||||||
} else { // off last n
|
} else { // off last n
|
||||||
|
@ -445,7 +443,7 @@ function cut(request) {
|
||||||
end = Math.max(length - vars.index, 1);
|
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([
|
const regexp = new RegExp([
|
||||||
/(?<style>cap|Cap|CAP)\//,
|
/(?<style>cap|Cap|CAP)\//,
|
||||||
/(?<target>[^\/]+)\//
|
/(?<target>[^\/]+)\//
|
||||||
].map(r => r.source).join(''),'i');
|
].map(r => r.source).join(''));
|
||||||
request.loop(request, {
|
request.loop(request, {
|
||||||
regexp: regexp
|
regexp: regexp
|
||||||
}, (input, params) => {
|
}, (input, params) => {
|
||||||
const vars = input.match(params.regexp).groups;
|
const vars = input.match(params.regexp).groups;
|
||||||
const isLowerCase = /c/.test(vars.style.slice(0,1)); // cap
|
const isLowerCase = /c/.test(vars.style.slice(0,1)); // cap
|
||||||
if (isLowerCase) {
|
if (isLowerCase) {
|
||||||
return vars.target.toLowerCase();
|
return input.replace(params.regexp, vars.target.toLowerCase());
|
||||||
} else {
|
} else {
|
||||||
const isStartCase = /a/.test(vars.style.slice(1,2)); // Cap
|
const isStartCase = /a/.test(vars.style.slice(1,2)); // Cap
|
||||||
if (isStartCase) {
|
if (isStartCase) {
|
||||||
return capitalize(vars.target);
|
return input.replace(params.regexp, capitalize(vars.target));
|
||||||
} else { // CAP
|
} 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
|
regexp: /mrr\/(?<target>[^\/]+)\//i
|
||||||
}, (input, params) => {
|
}, (input, params) => {
|
||||||
const target = input.match(params.regexp).groups.target;
|
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
|
regexp: /a\/an (?<target>\w+)/i
|
||||||
}, (input, params) => {
|
}, (input, params) => {
|
||||||
const target = input.match(params.regexp).groups.target;
|
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",
|
"name": "metamorpov",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "ISC",
|
"license": "GPL-3.0-or-later",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"english-verbs-gerunds": "^3.4.0",
|
"english-verbs-gerunds": "^3.4.0",
|
||||||
"english-verbs-helper": "^3.4.0",
|
"english-verbs-helper": "^3.4.0",
|
||||||
|
|
Loading…
Reference in New Issue