Greasy Fork

アイヌ語版ウィキペディアの文字変換

アイヌ語版ウィキペディアの文字変換をします。

目前为 2024-12-05 提交的版本。查看 最新版本

// ==UserScript==
// @name         アイヌ語版ウィキペディアの文字変換
// @namespace    http://lit.link/toracatman
// @version      2024-12-05
// @description  アイヌ語版ウィキペディアの文字変換をします。
// @author       トラネコマン
// @match        https://incubator.wikimedia.org/*Wp/ain*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @license      MIT
// ==/UserScript==

var char = "kana"; //kana=カタカナ、cyrillic=キリル文字

var convert_sign_attr = "data-convert";
var convert_sign_value = "true";
var separate = " | ";
var replacement = "\x1a";

var flag;
var c;
if (char == "kana") {
    flag = "ig";
    c = [
        ["á", "a"],	["í", "i"],	["ú", "u"],	["é", "e"],	["ó", "o"],
        ["(\\w)-(\\w)", "$1$2"],	["(\\w)=(\\w)", "$1$2"],
        [", ?", "、"],	["\\. ?", "。"],	["! ?", "!"],	["\\? ?", "?"],
        ["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ㇵ-ㇹ](?=[hx])", "ッ"],	["[hxㇵ-ㇹ]a", "ハ"],	["[hxㇵ-ㇹ]i", "ヒ"],	["[hxㇵ-ㇹ]u", "フ"],	["[hxㇵ-ㇹ]e", "ヘ"],	["[hxㇵ-ㇹ]o", "ホ"],	["[hx]", "ㇵ"],
        ["[rㇻ-ㇿ](?=r)", "ッ"],	["[rㇻ-ㇿ]a", "ラ"],	["[rㇻ-ㇿ]i", "リ"],	["[rㇻ-ㇿ]u", "ル"],	["[rㇻ-ㇿ]e", "レ"],	["[rㇻ-ㇿ]o", "ロ"],	["r", "ㇽ"],
        ["k(?=k)", "ッ"],	["ka", "カ"],	["ki", "キ"],	["ku", "ク"],	["ke", "ケ"],	["ko", "コ"],	["k", "ㇰ"],
        ["g(?=g)", "ッ"],	["ga", "ガ"],	["gi", "ギ"],	["gu", "グ"],	["ge", "ゲ"],	["go", "ゴ"],	["g", "ㇰ゙"],
        ["tsa","ツァ"],	["tsi","チ"],	["tse","ツェ"],	["tso","ツォ"],	["tsu","ツ"],	["ts","ッ"],
        ["s(?=s)", "ッ"],	["sa", "サ"],	["si", "シ"],	["su", "ス"],	["se", "セ"],	["so", "ソ"],	["s", "ㇱ"],
        ["d(?=d)", "ッ"],	["dza","ヅァ"],	["dzi","ヂ"],	["dze","ヅェ"],	["dzo","ヅォ"],	["dzu","ヅ"],	["dz","ッ゙"],
        ["z(?=z)", "ッ"],	["za", "ザ"],	["zi", "ジ"],	["zu", "ズ"],	["ze", "ゼ"],	["zo", "ゾ"],	["z", "ㇱ゙"],
        ["dja","ヂャ"],	["dju","ヂュ"],	["dje","ヂェ"],	["djo","ヂョ"],	["dji","ヂ"],	["dj","ッ゙"],
        ["j(?=j)", "ッ"],	["ja", "ジャ"],	["ju", "ジュ"],	["je", "ジェ"],	["jo", "ジョ"],	["ji", "ジ"],	["j", "ㇱ゙"],
        ["ta", "タ"],	["ti", "ティ"],	["tu", "トゥ"],	["te", "テ"],	["to", "ト"],	["t", "ッ"],
        ["da", "ダ"],	["di", "ディ"],	["du", "ドゥ"],	["de", "デ"],	["do", "ド"],	["d", "ㇳ゙"],
        ["ca", "チャ"],	["cu", "チュ"],	["ce", "チェ"],	["co", "チョ"],	["ci", "チ"],	["c", "ッ"],
        ["na", "ナ"],	["ni", "ニ"],	["nu", "ヌ"],	["ne", "ネ"],	["no", "ノ"],	["n", "ン"],
        ["m([bmp])", "ン$1"],
        ["b(?=b)", "ッ"],	["ba", "バ"],	["bi", "ビ"],	["bu", "ブ"],	["be", "ベ"],	["bo", "ボ"],	["b", "ㇷ゙"],
        ["p(?=p)", "ッ"],	["pa", "パ"],	["pi", "ピ"],	["pu", "プ"],	["pe", "ペ"],	["po", "ポ"],	["p", "ㇷ゚"],
        ["ma", "マ"],	["mi", "ミ"],	["mu", "ム"],	["me", "メ"],	["mo", "モ"],	["m", "ㇺ"],
        ["ya", "ヤ"],	["yu", "ユ"],	["ye", "イェ"],	["yo", "ヨ"],					["yi?", "イ"],
        ["wa", "ワ"],	["wi", "ウィ"],	["we", "ウェ"],	["wo", "ウォ"],					["wu?", "ウ"],
        ["v(?=v)", "ッ"],	["va", "ヴァ"],	["vi", "ヴィ"],	["ve", "ヴェ"],	["vo", "ヴォ"],	["vu", "ヴ"],	["v", "ゥ゙"],
        ["f(?=f)", "ッ"],	["fa", "ファ"],	["fi", "フィ"],	["fe", "フェ"],	["fo", "フォ"],	["fu", "フ"],	["f", "ㇷ"],
        ["a", "ア"],	["i", "イ"],	["u", "ウ"],	["e", "エ"],	["o", "オ"]
    ];
}
else if (char == "cyrillic") {
    flag = "g";
    c = [
        ["Á", "Á"], ["á", "á"],
        ["Í", "Í"], ["í", "í"],
        ["Ú", "Ú"], ["ú", "ú"],
        ["É", "É"], ["é", "é"],
        ["Ó", "Ó"], ["ó", "ó"],
        ["A", "А"], ["a", "а"],
        ["I", "И"], ["i", "и"],
        ["U", "У"], ["u", "у"],
        ["E", "Э"], ["e", "э"],
        ["O", "О"], ["o", "о"],
        ["K", "К"], ["k", "к"], ["G", "Г"], ["g", "г"],
        ["T[Ss]", "Ц"], ["t[Ss]", "ц"],
        ["S", "С"], ["s", "с"], ["Z", "З"], ["z", "з"],
        ["T", "Т"], ["t", "т"], ["D", "Д"], ["d", "д"],
        ["C", "Ч"], ["c", "ч"], ["J", "Ж"], ["J", "ж"],
        ["N", "Н"], ["n", "н"],
        ["H", "Х"], ["h", "х"], ["X", "Х"], ["x", "х"],
        ["P", "П"], ["p", "п"], ["B", "Б"], ["b", "б"],
        ["M", "М"], ["m", "м"],
        ["Y", "Й"], ["y", "й"],
        ["R", "Р"], ["r", "р"],
        ["W", "Ў"], ["w", "ў"], ["V", "В"], ["v", "в"],
        ["F", "Ф"], ["f", "ф"]
    ];
}

(function() {
    setInterval(() => {
        var a;
        a = document.querySelectorAll('style,.mw-parser-output [lang]:not([lang^="ain"]),.mw-parser-output [lang]:not([lang^="ain"]) *,.mw-editsection *,.external');
        if (a != null) {
            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);
            }
        }

        a = document.querySelectorAll('.mw-parser-output *,#mw-panel-toc-list :nth-child(n+2) *,#firstHeading *,#catlinks ul *,.mw-prefixindex-list *,.mw-allpages-chunk *,.mw-category *');
        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.split(separate);
                for (var j = 0; j < c.length; j++) {
                    s[0] = s[0].replace(new RegExp(c[j][0], flag), c[j][1]);
                }
                return s.join(separate);
            }
            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);
})();