国立アイヌ民族博物館アイヌ語アーカイブの 辞書の 強化

国立アイヌ民族博物館アイヌ語アーカイブの 辞書の 機能を 強化します。

// ==UserScript==
// @name         国立アイヌ民族博物館アイヌ語アーカイブの 辞書の 強化
// @namespace    https://lit.link/toracatman
// @version      2025-09-10
// @description  国立アイヌ民族博物館アイヌ語アーカイブの 辞書の 機能を 強化します。
// @author       トラネコマン
// @match        https://ainugo.nam.go.jp/dic*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license      MIT
// ==/UserScript==

let flag = "ig";
let c = [
    ["á", "a"],	["í", "i"],	["ú", "u"],	["é", "e"],	["ó", "o"],
    [", ?", "、"], ["\\. ?", "。"], ["! ?", "!"], ["\\? ?", "?"],
    [" ?“", "「"], ["” ?", "」"], [" ?‘", "『"], ["’ ?", "』"],
    ["(?<=[a-z])-(?=[a-z])", "・"], ["(?<=[a-z])=|=(?=[a-z])", "゠"],
    ["a[hx]", "aㇵ"], ["i[hx]", "iㇶ"], ["u[hx]", "uㇷ"], ["e[hx]", "eㇸ"], ["o[hx]", "oㇹ"],
    ["ar", "aㇻ"], ["ir", "iㇼ"], ["ur", "uㇽ"], ["er", "eㇾ"], ["or", "oㇿ"],
    ["[hxㇵ-ㇹ]a", "ハ"], ["[hxㇵ-ㇹ]i", "ヒ"], ["[hxㇵ-ㇹ]u", "フ"], ["[hxㇵ-ㇹ]e", "ヘ"], ["[hxㇵ-ㇹ]o", "ホ"], ["[hx]", "ㇵ"],
    ["[rㇻ-ㇿ]a", "ラ"], ["[rㇻ-ㇿ]i", "リ"], ["[rㇻ-ㇿ]u", "ル"], ["[rㇻ-ㇿ]e", "レ"], ["[rㇻ-ㇿ]o", "ロ"], ["r", "ㇽ"],
    ["ka", "カ"], ["ki", "キ"], ["ku", "ク"], ["ke", "ケ"], ["ko", "コ"], ["k", "ㇰ"],
    ["ga", "ガ"], ["gi", "ギ"], ["gu", "グ"], ["ge", "ゲ"], ["go", "ゴ"], ["g", "ㇰ゙"],
    ["(ts|ċ)a",""], ["ċi",""], ["(ts|ċ)u","ツ"], ["(ts|ċ)e",""], ["(ts|ċ)o",""],
    ["sa", "サ"], ["ṡi", ""], ["su", "ス"], ["se", "セ"], ["so", "ソ"],
    ["şa", ""], ["[sş]i", "シ"], ["şu", ""], ["şe", ""], ["şo", ""],
    ["dza",""], ["dżi",""], ["dzu","ヅ"], ["dze",""], ["dzo",""],
    ["za", "ザ"], ["żi", ""], ["zu", "ズ"], ["ze", "ゼ"], ["zo", "ゾ"],
    ["dja",""], ["d[jz]i","ヂ"], ["dju",""], ["dje",""], ["djo",""],
    ["ja", ""], ["[jz]i", "ジ"], ["ju", ""], ["je", ""], ["jo", ""],
    ["ca", ""], ["(ts|c)i", "チ"], ["cu", ""], ["ce", ""], ["co", ""],
    ["(ts|ċ)",""], ["ṡ", "ㇲ"], ["[sş]", "ㇱ"], ["dż","ッ゙"], ["ż", "ㇲ゙"], ["d[jz]","𛅚゙"], ["[jz]", "ㇱ゙"], ["c", "𛅚"],
    ["ta", "タ"], ["ti", ""], ["tu", ""], ["te", "テ"], ["to", "ト"], ["t", "ㇳ"],
    ["da", "ダ"], ["di", ""], ["du", ""], ["de", "デ"], ["do", "ド"], ["d", "ㇳ゙"],
    ["na", "ナ"], ["ni", "ニ"], ["nu", "ヌ"], ["ne", "ネ"], ["no", "ノ"], ["n", "ン"],
    ["ḣu", ""],
    ["ba", "バ"], ["bi", "ビ"], ["bu", "ブ"], ["be", "ベ"], ["bo", "ボ"], ["b", "ㇷ゙"],
    ["pa", "パ"], ["pi", "ピ"], ["pu", "プ"], ["pe", "ペ"], ["po", "ポ"], ["p", "ㇷ゚"],
    ["ma", "マ"], ["mi", "ミ"], ["mu", "ム"], ["me", "メ"], ["mo", "モ"], ["m", "ㇺ"],
    ["ya", "ヤ"], ["yi", "𛄠"], ["yu", "ユ"], ["ye", "𛄡"], ["yo", "ヨ"], ["y", ""],
    ["wa", "ワ"], ["wi", "ヰ"], ["wu", "𛄢"], ["we", "ヱ"], ["wo", "ヲ"], ["w", ""],
    ["va", "ヷ"], ["vi", "ヸ"], ["vu", ""], ["ve", "ヹ"], ["vo", "ヺ"], ["v", "𛅭゙"],
    ["fa", ""], ["fi", ""], ["fu", ""], ["fe", ""], ["fo", ""], ["f", "𛅭゚"],
    ["a", "ア"],  ["i", "イ"],  ["u", "ウ"],  ["e", "エ"],  ["o", "オ"],
    ["ʼ", ""]
];

let source = {
    tamura: {name: "田村", mark: "出典:田村"},
    kayano: {name: "萱野", mark: "出典:萱野"},
    cxiri: {name: "知里", mark: ""}
};
for (let a in source) {
    source[a].enable = (localStorage.getItem(a) ?? "true") == "true";
}
let display;
function updateAuthor() {
    let css = "";
    for (let a in source) {
        if (!source[a].enable) {
            css += `
.${a} {
	display: none;
}
`;
        }
    }
    display.textContent = css;
}

let order;

(() => {
    let style = document.createElement("style");
    style.textContent = '@font-face{font-family:"Mkana+";src:local("Mkana+"),url("https://toracatman.github.io/fonts/mkanaplus.woff2")format("woff2"),url("https://toracatman.github.io/fonts/mkanaplus.woff")format("woff");font-display:swap;}.kana{font-family:"Mkana+";}dd{white-space:pre-line;}dd:first-line{font-size:0}';
    document.head.appendChild(style);

    let dt = document.getElementsByTagName("dt");
    for (let i = 0; i < dt.length; i++) {
        let s = dt[i].textContent;
        for (let j = 0; j < c.length; j++) {
            s = s.replace(new RegExp(c[j][0], flag), c[j][1]);
        }
        dt[i].insertAdjacentHTML("beforeend", ` / <span class="kana">${s}</span>`);
    }

    display = document.createElement("style");
    updateAuthor();
    document.head.appendChild(display);

    let html = `
<h2>オプション</h2>
<h3>出典</h3>`;
    for (let a in source) {
        html += `<label><input class="schSource" type="checkbox" name="${a}"${source[a].enable ? " checked" : ""}>${source[a].name}</label>`;
    }
    document.getElementById("wordForm").insertAdjacentHTML("afterend", html);
    let schSource = document.getElementsByClassName("schSource");
    for (let i = 0; i < schSource.length; i++) {
        schSource[i].addEventListener("change", function() {
            source[this.name].enable = this.checked;
            localStorage.setItem(this.name, this.checked);
            updateAuthor();
        });
    }

    order = localStorage.getItem("order") ?? "ain-ja";
    html = `
<label><input class="schOrder" type="radio" name="order" value="ain-ja"${order == "ain-ja" ? " checked" : ""}>アイヌ語→日本語</label>
<label><input class="schOrder" type="radio" name="order" value="ja-ain"${order == "ja-ain" ? " checked" : ""}>日本語→アイヌ語</label>
`;
    document.getElementById("sch-word").insertAdjacentHTML("afterend", html);
    let schOrder = document.getElementsByClassName("schOrder");
    for (let i = 0; i < schOrder.length; i++) {
        schOrder[i].addEventListener("change", function() {
            order = this.value;
            localStorage.setItem("order", this.value);
        });
    }

    let dd = document.getElementsByTagName("dd");
    for (let i = 0; i < dd.length; i++) {
        let text = dd[i].textContent;
        for (let a in source) {
            if (text.indexOf(source[a].mark) !== -1) {
                dd[i].classList.add(a);
                dd[i].previousElementSibling.classList.add(a);
                break;
            }
        }
    }

    if (order == "ja-ain") {
        dd = Array.from(dd);
        for (let i = 0; i < dd.length; i++) {
            let text = dd[i].textContent;
            let o = text.slice(text.indexOf("\n", text.indexOf("\n") + 1))
            .replace(/【.+?】/g, "")
            .replace(/\[.+?\]/g, "")
            .replace(/\(.+?\)/g, "")
            .trim().indexOf(document.getElementById("sch-word").value)
            dd[i].setAttribute("data-order", o == -1 ? Number.MAX_SAFE_INTEGER : o);
        }

        dd.sort((a, b) => Number(a.getAttribute("data-order")) - Number(b.getAttribute("data-order")));

        let f = document.createDocumentFragment();
        let dl = document.querySelector("dl");
        f.appendChild(dl);
        let dl2 = document.createElement("dl");
        for (let i = 0; i < dd.length; i++) {
            dl2.appendChild(dd[i].previousElementSibling);
            dl2.appendChild(dd[i]);
        }
        document.querySelector(".xresultDict").appendChild(dl2);
    }
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址