Greasy Fork

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

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

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

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

var letter = "kana"; //kana=カタカナ katakana=拡張カタカナ hiragana=拡張ひらがな cyrillic=キリル文字

//カタカナ(拡張カタカナでない)の設定
var tu = 0; //tu 0=トゥ 1=ト゚ 2=ツ゚
var ce = 0; //ce 0=チェ 1=セ゚
var yw = 0; //-y, -w 0=イ、ウ 1=ィ、ゥ
var renzoku = 0; //子音の連続 0=ッにする 1=ッにしない
var nm = 0; //b、m、pの前のn 0=ン 1=ㇺ

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

var flag;
var c;
if (letter == "kana") {
    flag = "ig";
    c = [
        ["á", "a"],	["í", "i"],	["ú", "u"],	["é", "e"],	["ó", "o"],
        ["(?<=\\w)[-=](?=\\w)", ""],
        [", ?", "、"],	["\\. ?", "。"],	["! ?", "!"],	["\\? ?", "?"],
        [" ?“", "「"],	["” ?", "」"],	[" ?‘", "『"],	["’ ?", "』"],
        ["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", "ヒ"],	["[hḣxㇵ-ㇹ]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", "ㇰ゙"],
        ["(ts|ċ)a","ツァ"],	["ċi","ツィ"],	["(ts|ċ)e","ツェ"],	["(ts|ċ)o","ツォ"],	["(ts|ċ)u","ツ"],
        ["s(?=s)", "ッ"],	["sa", "サ"],	["ṡi", "スィ"],	["su", "ス"],	["se", "セ"],	["so", "ソ"],
        ["ş(?=ş)", "ッ"],	["şa", "シャ"],	["şu", "シュ"],	["şe", "シェ"],	["şo", "ショ"],	["[sş]i", "シ"],
        ["d(?=d)", "ッ"],	["dza","ヅァ"],	["dżi","ヅィ"],	["dze","ヅェ"],	["dzo","ヅォ"],	["dzu","ヅ"],
        ["z(?=z)", "ッ"],	["za", "ザ"],	["żi", "ズィ"],	["zu", "ズ"],	["ze", "ゼ"],	["zo", "ゾ"],
        ["dja","ヂャ"],	["dju","ヂュ"],	["dje","ヂェ"],	["djo","ヂョ"],	["d[jz]i","ヂ"],
        ["j(?=j)", "ッ"],	["ja", "ジャ"],	["ju", "ジュ"],	["je", "ジェ"],	["jo", "ジョ"],	["[jz]i", "ジ"],
        ["ca", "チャ"],	["cu", "チュ"],	["ce", "チェ"],	["co", "チョ"],	["(ts|c)i", "チ"],
        ["(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", "ン"],
        ["m(?=[bmp])", "ン"],
        ["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", "オ"]
    ];
    if (tu + ce + yw + renzoku + nm != 0) {
        var b = JSON.stringify(c);
        switch (tu) {
            case 1:
                b = b.replace("トゥ", "ト゚");
                break;
            case 2:
                b = b.replace("トゥ", "ツ゚");
                break;
        }
        if (ce == 1) {
            b = b.replace("チェ", "セ゚");
        }
        if (yw == 1) {
            b = b.replace('["yi?","イ"]', '["yi","イ"],["y","ィ"]')
                .replace('["wu?","ウ"]', '["wu","ウ"],["w","ゥ"]');
        }
        if (renzoku == 1) {
            b = b.replace(/\["[^"]+?\(\?=[^"]+?\)","ッ"\],/g, "");
        }
        if (nm == 1) {
            b = b.replace('["m(?=[bmp])","ン"],', "");
        }
        c = JSON.parse(b);
    }
}
else if (letter == "katakana") {
    flag = "ig";
    c = [
        ["á", "a"],	["í", "i"],	["ú", "u"],	["é", "e"],	["ó", "o"],
        [", ?", "、"], ["\\. ?", "。"], ["! ?", "!"], ["\\? ?", "?"],
        [" ?“", "「"], ["” ?", "」"], [" ?‘", "『"], ["’ ?", "』"],
        ["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", "オ"]
    ];
}
else if (letter == "hiragana") {
    flag = "igu";
    c = [
        ["á", "a"],	["í", "i"],	["ú", "u"],	["é", "e"],	["ó", "o"],
        [", ?", "、"], ["\\. ?", "。"], ["! ?", "!"], ["\\? ?", "?"],
        [" ?“", "「"], ["” ?", "」"], [" ?‘", "『"], ["’ ?", "』"],
        ["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", "お"]
    ];
}
else if (letter == "cyrillic") {
    flag = "g";
    c = [
        ["Á", "Á"], ["á", "á"], ["Í", "Í"], ["í", "í"],
        ["Ú", "Ú"], ["ú", "ú"], ["É", "É"], ["é", "é"],
        ["Ó", "Ó"], ["ó", "ó"],
        ["A", "А"], ["a", "а"], ["I", "И"], ["i", "и"],
        ["U", "У"], ["u", "у"], ["E", "Э"], ["e", "э"],
        ["O", "О"], ["o", "о"],
        ["K", "К"], ["k", "к"], ["G", "Г"], ["g", "г"],
        ["S", "С"], ["s", "с"], ["Z", "З"], ["z", "з"],
        ["Ṡ", "С̇"], ["ṡ", "с̇"], ["Ż", "З̇"], ["ż", "з̇"],
        ["Ş", "Ш"], ["ş", "ш"], ["J", "Ж"], ["J", "ж"],
        ["C", "Ч"], ["c", "ч"], ["Ċ", "Ц"], ["ċ", "ц"],
        ["T", "Т"], ["t", "т"], ["D", "Д"], ["d", "д"],
        ["N", "Н"], ["n", "н"],
        ["Ḣ", "Х̇"], ["ḣ", "х̇"], ["[HX]", "Х"], ["[hx]", "х"],
        ["P", "П"], ["p", "п"], ["B", "Б"], ["b", "б"],
        ["M", "М"], ["m", "м"],
        ["Y", "Й"], ["y", "й"],
        ["R", "Р"], ["r", "р"],
        ["W", "Ў"], ["w", "ў"], ["V", "В"], ["v", "в"],
        ["F", "Ф"], ["f", "ф"]
    ];
}

(function() {
    if (letter == "katakana" || letter == "hiragana") {
        var 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;}*{font-family:"Mkana+"!important;}';
        document.head.appendChild(style);
    }

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