Greasy Fork 支持简体中文。

国立アイヌ民族博物館アイヌ語アーカイブの半角を小書きに

「国立アイヌ民族博物館アイヌ語アーカイブ」という サイトの 半角カタカナを 小書きカタカナに します。

// ==UserScript==
// @name         国立アイヌ民族博物館アイヌ語アーカイブの半角を小書きに
// @namespace    http://lit.link/toracatman
// @version      2024-10-23
// @description  「国立アイヌ民族博物館アイヌ語アーカイブ」という サイトの 半角カタカナを 小書きカタカナに します。
// @author       トラネコマン
// @match        https://ainugo.nam.go.jp/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license      MIT
// ==/UserScript==

var flag = "g";
var convert_sign_attr = "data-small";
var convert_sign_value = "true";
var replacement = "\x1a";

var c = [
    ["ク", "ㇰ"],
    ["シ", "ㇱ"],
    ["ス", "ㇲ"],
    ["ト", "ㇳ"],
    ["ヌ", "ㇴ"],
    ["ハ", "ㇵ"],
    ["ヒ", "ㇶ"],
    ["プ", "ㇷ゚"],
    ["フ", "ㇷ"],
    ["ヘ", "ㇸ"],
    ["ホ", "ㇹ"],
    ["ム", "ㇺ"],
    ["ラ", "ㇻ"],
    ["リ", "ㇼ"],
    ["ル", "ㇽ"],
    ["レ", "ㇾ"],
    ["ロ", "ㇿ"],
];

(function() {
    setInterval(() => {
        var a = document.querySelectorAll("dd,dd *,.kana,.word,.ainu,.ainu *");
        if (a == null) return;
        for (var i = 0; i < a.length; i++) {
            if (a[i].getAttribute(convert_sign_attr) == convert_sign_value) continue;
            a[i].setAttribute(convert_sign_attr, convert_sign_value);

            if (!(a[i].hasChildNodes())) continue;
            var h = (b) => {
                var s = b;
                for (var j = 0; j < c.length; j++) {
                    s = s.replace(new RegExp(c[j][0], flag), c[j][1]);
                }
                return s;
            }
            if (a[i].childElementCount == 0) {
                a[i].textContent = h(a[i].textContent);
            }
            else {
                var t = a[i];
                var p = document.createTextNode("");
                t.replaceWith(p);
                var r = document.createDocumentFragment();
                var e = t.firstElementChild;
                while (e != null) {
                    e.replaceWith(document.createTextNode(replacement));
                    r.appendChild(e);
                    e = t.firstElementChild;
                }
                var ss = h(t.textContent).split(replacement);
                t.textContent = "";
                t.appendChild(document.createTextNode(ss[0]));
                for (var j = 1; j < ss.length; j++) {
                    t.appendChild(r.firstElementChild);
                    t.appendChild(document.createTextNode(ss[j]));
                }
                p.replaceWith(t);
            }
        }
    }, 100);
})();