From cc7f55a2538686012a87cbb7ca2d6798bbf85306 Mon Sep 17 00:00:00 2001 From: Jean Date: Mon, 18 Aug 2025 11:32:24 -0700 Subject: [PATCH] Fixing also and cut bugs --- metamorpov.js | 26 +++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/metamorpov.js b/metamorpov.js index 04dbe5a..15d17c9 100644 --- a/metamorpov.js +++ b/metamorpov.js @@ -94,6 +94,10 @@ function loopNode(request, params, method) { /* Iterator for strings belonging to HTML Node elements */ function loopNodeValue(request, params, method) { + if (params.looping == false) { + params.looping = true; + return; + } if (request.input.nodeValue.match(params.regexp) == null) { return; } request.input.nodeValue = method(request.input.nodeValue, params); loopNodeValue(request, params, method); @@ -101,6 +105,10 @@ function loopNodeValue(request, params, method) { /* Iterator for string elements */ function loopString(request, params, method) { + if (params.looping == false) { + params.looping = true; + return; + } if (request.input.match(params.regexp) == null) { return; } request.input = method(request.input, params); loopString(request, params, method); @@ -253,8 +261,10 @@ function plv(request) { function yn(request) { request.loop(request, { regexp: /\by\/n\b|\(y\/n\)|\[y\/n\]/ig, - replacement: request.options["name"] + replacement: request.options["name"], + looping: true }, (input, params) => { + params.looping = false; return input.replaceAll(params.regexp, params.replacement); }); } @@ -314,8 +324,14 @@ function prn(request) { /* Replaces specific words indicated in the options */ function also(request) { Object.entries(request.options.also).forEach(([key, replacement]) => { - const regexp = new RegExp(RegExp.escape(key), "gi"); - request.input = request.input.replaceAll(regexp, replacement); + request.loop(request, { + regexp: new RegExp(RegExp.escape(key), "gi"), + replacement: replacement, + looping: true + }, (input, params) => { + params.looping = false; + return input.replaceAll(params.regexp, params.replacement); + }) }); } @@ -441,6 +457,10 @@ function cut(request) { }, (input, params) => { const vars = input.match(params.regexp).groups; const length = vars.target.length; + if (length == 1) { + return input.replace(params.regexp, vars.target); + } + let start, end; if (vars.offonly.toLowerCase() == "only") { if (vars.firstlast.toLowerCase() == "first") { // only first n diff --git a/package.json b/package.json index 4d50f95..72ce121 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "metamorpov", "title": "MetamorPOV", - "version": "1.0.1", + "version": "1.0.2", "description": "Enables customization of reader-insert stories by translating text hooks such as Y/n, pov/s, and vrb/present/do/.", "main": "metamorpov.js", "scripts": {