this this many

thiiiis many

// ==UserScript==
// @name         this this many
// @namespace    http://tampermonkey.net/
// @version      2025-08-24
// @description  thiiiis many
// @license      WTFPL
// @author       winfy
// @match        https://*/*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    const chance = 0.3;
    const renames = [
        [/many/g, mkIs("th@is many")],
        [/Many/g, mkIs("Th@is Many")],
        [/MANY/g, mkIs("TH@iS MANY")]
    ];

    function mkIs(str) {
        return match => str.replace(/@(.)/g, (_, c) => Math.random() < chance ? new Array(1 + Math.random() * 10 | 0).fill(c).join("") : c);
    }

    function subst(text) {
        for (const [p, sub] of renames) {
            text = text.replace(p, match => Math.random() < chance ? sub instanceof Function ? sub.apply(this, arguments) : sub : match);
        }
        return text;
    }

    const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT);
    let node;

    while ((node = walker.nextNode())) {
        node.data = subst(node.data);
    }
})();