Fixing verbs, they were both broken and confusing but are now neither!
This commit is contained in:
parent
445f38b4ee
commit
b815eb9da7
|
@ -1,6 +1,6 @@
|
||||||
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");
|
||||||
const verbsData = verbsHelper.mergeVerbsData(verbsIrregular, verbsGerunds);
|
const verbsData = verbsHelper.mergeVerbsData(verbsIrregular, verbsGerunds);
|
||||||
|
|
||||||
/* Replaces verbs, point-of-view, name, pronouns, and "also" terms */
|
/* Replaces verbs, point-of-view, name, pronouns, and "also" terms */
|
||||||
|
@ -50,19 +50,8 @@ function replaceName(options) {
|
||||||
|
|
||||||
/* Replaces all verb keys */
|
/* Replaces all verb keys */
|
||||||
function replaceVerbs(options) {
|
function replaceVerbs(options) {
|
||||||
const isPlural = getPronouns(options.preset, options.other).plurality == "plural";
|
const searchTerm = /(v)r([nb])\/([\w\s]+)\/(?:((?:(?:simple|progressive|perfect|perfect[ _]progressive|participle(?![ _]future))[ _])*(?:past|present|future))\/)*/i;
|
||||||
if (isPlural) {
|
walk(document.body, searchTerm, options, verbMethod);
|
||||||
walk(document.body, /([Vv])r([Nn])\/([\w\s]+)\/([\w\s]+)\//, options, pluralPrnVerbMethod);
|
|
||||||
} else {
|
|
||||||
walk(document.body, /([Vv])r[Nn]\/([\w\s]+)\/([\w\s]+)\//, options, prnVerbMethod);
|
|
||||||
}
|
|
||||||
|
|
||||||
const isPluralThird = isPlural && options.pov == "third";
|
|
||||||
if (isPluralThird) {
|
|
||||||
walk(document.body, /([Vv])r([Bb])\/([\w\s]+)\/([\w\s]+)\//, options, pluralThirdVerbMethod);
|
|
||||||
} else {
|
|
||||||
walk(document.body, /([Vv])r[Bb]\/([\w\s]+)\/([\w\s]+)\//, options, verbMethod);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Replaces all pronoun keys */
|
/* Replaces all pronoun keys */
|
||||||
|
@ -237,14 +226,14 @@ function replaceAlso(options) {
|
||||||
|
|
||||||
/* Replaces exception statements by POV */
|
/* Replaces exception statements by POV */
|
||||||
function replaceExceptions(options) {
|
function replaceExceptions(options) {
|
||||||
const searchTerm = /[Ee]xc\/([^\/]*)\/([^\/]*)\//;
|
const searchTerm = /exc\/([^\/]*)\/([^\/]*)\/ig/;
|
||||||
walk(document.body, searchTerm, options, exceptionMethod);
|
walk(document.body, searchTerm, options, exceptionMethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Replaces cut statements with cuts */
|
/* Replaces cut statements with cuts */
|
||||||
function replaceCuts() {
|
function replaceCuts() {
|
||||||
const searchTerm = /[Cc]ut\/([^\/]+)\/(-?[\d]+)\//;
|
const searchTerm = /cut\/([^\/]+)\/(-?[\d]+)\/ig/;
|
||||||
walk(document.body, searchTerm, null, cutMethod);
|
walk(document.body, searchTerm, null, cutMethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -288,133 +277,49 @@ function directMethod(node, searchTerm, replaceValue) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Replaces all verbs, not used for third-person plural */
|
/* Replaces all verbs, not used for third-person plural */
|
||||||
/* TODO Is the "options" variable here readable? It's not replaceValue and that seems bad */
|
|
||||||
function verbMethod(node, searchTerm, options) {
|
function verbMethod(node, searchTerm, options) {
|
||||||
let match = node.nodeValue.match(searchTerm);
|
const match = node.nodeValue.match(searchTerm);
|
||||||
if (match == null) { return; }
|
if (match == null) { return; }
|
||||||
const isCapital = /V/.test(match[1]);
|
const isCapital = /V/.test(match[1]);
|
||||||
const verb = match[2];
|
const category = match[2];
|
||||||
let tense = getTense(match[3]);
|
const verb = match[3];
|
||||||
const isTenseProvided = tense != null;
|
let tense = match[4];
|
||||||
if (!isTenseProvided) {
|
|
||||||
|
if (tense == null) {
|
||||||
tense = "PAST";
|
tense = "PAST";
|
||||||
|
} else {
|
||||||
|
tense = tense.toUpperCase().replaceAll(" ", "_");
|
||||||
}
|
}
|
||||||
|
|
||||||
let replaceValue = verbsHelper.getConjugation(verbsData, verb, tense, getPovIndex(options));
|
let povIndex;
|
||||||
|
switch (category) {
|
||||||
|
case "B": /* B and b vary by POV, capitalized to indicate a named subject */
|
||||||
|
if (options.pov == "third") {
|
||||||
|
povIndex = getPovIndex("third-singular", null);
|
||||||
|
} else {
|
||||||
|
povIndex = getPovIndex(options.pov, options);
|
||||||
|
}
|
||||||
|
case "b":
|
||||||
|
povIndex = getPovIndex(options.pov, options);
|
||||||
|
case "N": /* N and n are always third-person */
|
||||||
|
povIndex = getPovIndex("third-singular", null);
|
||||||
|
case "n":
|
||||||
|
povIndex = getPovIndex("third", options);
|
||||||
|
}
|
||||||
|
|
||||||
|
let replaceValue = verbsHelper.getConjugation(verbsData, verb, tense, povIndex);
|
||||||
|
|
||||||
if (isCapital) {
|
if (isCapital) {
|
||||||
replaceValue = capitalize(replaceValue);
|
replaceValue = capitalize(replaceValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isTenseProvided) {
|
node.nodeValue = node.nodeValue.replace(searchTerm, replaceValue);
|
||||||
node.nodeValue = node.nodeValue.replace(searchTerm, replaceValue);
|
|
||||||
} else {
|
|
||||||
const searchTermShortVerb = /([Vv])r[Bb]\/([\w\s]+)\//
|
|
||||||
node.nodeValue = node.nodeValue.replace(searchTermShortVerb, replaceValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
verbMethod(node, searchTerm, options);
|
verbMethod(node, searchTerm, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Replaces all verbs, used only for third-person plural */
|
|
||||||
function pluralThirdVerbMethod(node, searchTerm, options) {
|
|
||||||
let match = node.nodeValue.match(searchTerm);
|
|
||||||
if (match == null) { return; }
|
|
||||||
const isCapital = /V/.test(match[1]);
|
|
||||||
const isNamedActor = /B/.test(match[2]);
|
|
||||||
const verb = match[3];
|
|
||||||
let tense = getTense(match[4]);
|
|
||||||
const isTenseProvided = tense != null;
|
|
||||||
if (!isTenseProvided) {
|
|
||||||
tense = "PAST";
|
|
||||||
}
|
|
||||||
|
|
||||||
let replaceValue;
|
|
||||||
if (isNamedActor) {
|
|
||||||
replaceValue = verbsHelper.getConjugation(verbsData, verb, tense, 2);
|
|
||||||
} else {
|
|
||||||
replaceValue = verbsHelper.getConjugation(verbsData, verb, tense, getPovIndex(options));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isCapital) {
|
|
||||||
replaceValue = capitalize(replaceValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isTenseProvided) {
|
|
||||||
node.nodeValue = node.nodeValue.replace(searchTerm, replaceValue);
|
|
||||||
} else {
|
|
||||||
const searchTermShortVerb = /([Vv])r([Bb])\/([\w\s]+)\//
|
|
||||||
node.nodeValue = node.nodeValue.replace(searchTermShortVerb, replaceValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
pluralThirdVerbMethod(node, searchTerm, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Replaces verbs by pronoun rather than POV, not used for plural */
|
|
||||||
function prnVerbMethod(node, searchTerm, options) {
|
|
||||||
let match = node.nodeValue.match(searchTerm);
|
|
||||||
if (match == null) { return; }
|
|
||||||
const isCapital = /V/.test(match[1]);
|
|
||||||
const verb = match[2];
|
|
||||||
let tense = getTense(match[3]);
|
|
||||||
const isTenseProvided = tense != null;
|
|
||||||
if (!isTenseProvided) {
|
|
||||||
tense = "PAST";
|
|
||||||
}
|
|
||||||
|
|
||||||
let replaceValue = verbsHelper.getConjugation(verbsData, verb, tense, 2);
|
|
||||||
|
|
||||||
if (isCapital) {
|
|
||||||
replaceValue = capitalize(replaceValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isTenseProvided) {
|
|
||||||
node.nodeValue = node.nodeValue.replace(searchTerm, replaceValue);
|
|
||||||
} else {
|
|
||||||
const searchTermShortVerb = /([Vv])r[Bb]\/([\w\s]+)\//
|
|
||||||
node.nodeValue = node.nodeValue.replace(searchTermShortVerb, replaceValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
prnVerbMethod(node, searchTerm, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Replaces verbs by pronoun rather than POV, used only for plural */
|
|
||||||
function pluralPrnVerbMethod(node, searchTerm, options) {
|
|
||||||
let match = node.nodeValue.match(searchTerm);
|
|
||||||
if (match == null) { return; }
|
|
||||||
const isCapital = /V/.test(match[1]);
|
|
||||||
const isNamedActor = /N/.test(match[2]);
|
|
||||||
const verb = match[3];
|
|
||||||
let tense = getTense(match[4]);
|
|
||||||
const isTenseProvided = tense != null;
|
|
||||||
if (!isTenseProvided) {
|
|
||||||
tense = "PAST";
|
|
||||||
}
|
|
||||||
|
|
||||||
let replaceValue;
|
|
||||||
if (isNamedActor) {
|
|
||||||
replaceValue = verbsHelper.getConjugation(verbsData, verb, tense, 2);
|
|
||||||
} else {
|
|
||||||
replaceValue = verbsHelper.getConjugation(verbsData, verb, tense, 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isCapital) {
|
|
||||||
replaceValue = capitalize(replaceValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isTenseProvided) {
|
|
||||||
node.nodeValue = node.nodeValue.replace(searchTerm, replaceValue);
|
|
||||||
} else {
|
|
||||||
const searchTermShortVerb = /([Vv])r([Bb])\/([\w\s]+)\//
|
|
||||||
node.nodeValue = node.nodeValue.replace(searchTermShortVerb, replaceValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
pluralPrnVerbMethod(node, searchTerm, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allows for custom words to be cut off */
|
/* Allows for custom words to be cut off */
|
||||||
function cutMethod(node, searchTerm, unused) {
|
function cutMethod(node, searchTerm, unused) {
|
||||||
let match = node.nodeValue.match(searchTerm);
|
const match = node.nodeValue.match(searchTerm);
|
||||||
if (match == null) { return; }
|
if (match == null) { return; }
|
||||||
const target = match[1];
|
const target = match[1];
|
||||||
const amount = match[2];
|
const amount = match[2];
|
||||||
|
@ -438,7 +343,7 @@ function cutMethod(node, searchTerm, unused) {
|
||||||
|
|
||||||
/* Allows for custom words to be cut off */
|
/* Allows for custom words to be cut off */
|
||||||
function exceptionMethod(node, searchTerm, options) {
|
function exceptionMethod(node, searchTerm, options) {
|
||||||
let match = node.nodeValue.match(searchTerm);
|
const match = node.nodeValue.match(searchTerm);
|
||||||
if (match == null) { return; }
|
if (match == null) { return; }
|
||||||
|
|
||||||
let replaceValue;
|
let replaceValue;
|
||||||
|
@ -458,53 +363,21 @@ function capitalize(word) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Determines the index for point-of-view to be used when conjugating verbs */
|
/* Determines the index for point-of-view to be used when conjugating verbs */
|
||||||
function getPovIndex(options) {
|
function getPovIndex(pov, options) {
|
||||||
switch (options.pov) {
|
switch (pov) {
|
||||||
case "first":
|
case "first":
|
||||||
return 0;
|
return 0;
|
||||||
case "second":
|
case "second":
|
||||||
return 1;
|
return 1;
|
||||||
|
case "third-singular":
|
||||||
|
return 2;
|
||||||
case "third":
|
case "third":
|
||||||
if (getPronouns(options.preset, options.other).plurality == "singular") {
|
if (getPronouns(options.preset, options.other).plurality == "singular") {
|
||||||
return 2;
|
return 2;
|
||||||
} else { /* Plurality is plural, "they go" */
|
} else { /* Plurality is plural, "they go" */
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
}
|
return getThirdIndex(options);
|
||||||
}
|
|
||||||
|
|
||||||
/* Gets the verb tense from a regexp match */
|
|
||||||
function getTense(match) {
|
|
||||||
const tense = match.toUpperCase().replaceAll(" ", "_");
|
|
||||||
const tenses = [
|
|
||||||
// SIMPLE
|
|
||||||
'SIMPLE_PAST',
|
|
||||||
'PAST',
|
|
||||||
'SIMPLE_PRESENT',
|
|
||||||
'PRESENT',
|
|
||||||
'SIMPLE_FUTURE',
|
|
||||||
'FUTURE',
|
|
||||||
// PROGRESSIVE
|
|
||||||
'PROGRESSIVE_PAST',
|
|
||||||
'PROGRESSIVE_PRESENT',
|
|
||||||
'PROGRESSIVE_FUTURE',
|
|
||||||
// PERFECT
|
|
||||||
'PERFECT_PAST',
|
|
||||||
'PERFECT_PRESENT',
|
|
||||||
'PERFECT_FUTURE',
|
|
||||||
// PERFECT PROGRESSIVE
|
|
||||||
'PERFECT_PROGRESSIVE_PAST',
|
|
||||||
'PERFECT_PROGRESSIVE_PRESENT',
|
|
||||||
'PERFECT_PROGRESSIVE_FUTURE',
|
|
||||||
// PARTICIPLE
|
|
||||||
'PARTICIPLE_PRESENT',
|
|
||||||
'PARTICIPLE_PAST',
|
|
||||||
];
|
|
||||||
|
|
||||||
if (tenses.indexOf(tense) == -1) {
|
|
||||||
return null;
|
|
||||||
} else {
|
|
||||||
return tense;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue