// ==UserScript==
// @name アイヌ語版ウィキペディアの文字変換
// @namespace http://lit.link/toracatman
// @version 2024-10-23
// @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"],
[", ?", "、"], ["\\. ?", "。"], [" ", " "],
["ah", "aㇵ"], ["ih", "iㇶ"], ["uh", "uㇷ"], ["eh", "eㇸ"], ["oh", "oㇹ"],
["ar", "aㇻ"], ["ir", "iㇼ"], ["ur", "uㇽ"], ["er", "eㇾ"], ["or", "oㇿ"],
["[hㇵ-ㇹ](?=h)", "ッ"],
["[hㇵ-ㇹ]a", "ハ"],
["[hㇵ-ㇹ]i", "ヒ"],
["[hㇵ-ㇹ]u", "フ"],
["[hㇵ-ㇹ]e", "ヘ"],
["[hㇵ-ㇹ]o", "ホ"],
["[rㇻ-ㇿ](?=r)", "ッ"],
["[rㇻ-ㇿ]a", "ラ"],
["[rㇻ-ㇿ]i", "リ"],
["[rㇻ-ㇿ]u", "ル"],
["[rㇻ-ㇿ]e", "レ"],
["[rㇻ-ㇿ]o", "ロ"],
["k(?=k)", "ッ"], ["ka", "カ"], ["ki", "キ"], ["ku", "ク"], ["ke", "ケ"], ["ko", "コ"], ["k", "ㇰ"],
["s(?=s)", "ッ"], ["sa", "サ"], ["si", "シ"], ["su", "ス"], ["se", "セ"], ["so", "ソ"], ["s", "ㇱ"],
["ta", "タ"], ["tu", "トゥ"], ["te", "テ"], ["to", "ト"], ["t", "ッ"],
["ca", "チャ"], ["cu", "チュ"], ["ce", "チェ"], ["co", "チョ"], ["ci", "チ"],
["na", "ナ"], ["ni", "ニ"], ["nu", "ヌ"], ["ne", "ネ"], ["no", "ノ"], ["n", "ン"],
["m(p|m)", "ン$1"],
["p(?=p)", "ッ"], ["pa", "パ"], ["pi", "ピ"], ["pu", "プ"], ["pe", "ペ"], ["po", "ポ"], ["p", "ㇷ゚"],
["ma", "マ"], ["mi", "ミ"], ["mu", "ム"], ["me", "メ"], ["mo", "モ"], ["m", "ㇺ"],
["ya", "ヤ"], ["yu", "ユ"], ["ye", "イェ"], ["yo", "ヨ"], ["y", "イ"],
["wa", "ワ"], ["we", "ウェ"], ["wo", "ウォ"], ["w", "ウ"],
["a", "ア"], ["i", "イ"], ["u", "ウ"], ["e", "エ"], ["o", "オ"]
];
}
else if (char == "cyrillic") {
flag = "g";
c = [
["Á", "Á"], ["á", "á"],
["Í", "Í"], ["í", "í"],
["Ú", "Ú"], ["ú", "ú"],
["É", "É"], ["é", "é"],
["Ó", "Ó"], ["ó", "ó"],
["Y(A|a)", "Я"], ["y(A|a)", "я"],
["Y(U|u)", "Ю"], ["y(U|u)", "ю"],
["Y(E|e)", "Е"], ["y(E|e)", "е"],
["Y(O|o)", "Ё"], ["y(O|o)", "ё"],
["Y", "Й"], ["y", "й"],
["A", "А"], ["a", "а"],
["I", "И"], ["i", "и"],
["U", "У"], ["u", "у"],
["E", "Э"], ["e", "э"],
["O", "О"], ["o", "о"],
["K", "К"], ["k", "к"],
["S", "С"], ["s", "с"],
["S", "Ш"], ["s", "ш"],
["T", "Т"], ["t", "т"],
["C", "Ч"], ["c", "ч"],
["C", "Ц"], ["c", "ц"],
["N", "Н"], ["n", "н"],
["H", "Х"], ["h", "х"],
["H", "Һ"], ["h", "һ"],
["P", "П"], ["p", "п"],
["M", "М"], ["m", "м"],
["R", "Р"], ["r", "р"],
["W", "Ў"], ["w", "ў"]
];
}
(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;
if (a[i].childElementCount == 0) {
var s = a[i].textContent.split(separate);
for (var j = 0; j < c.length; j++) {
s[0] = s[0].replace(new RegExp(c[j][0], flag), c[j][1]);
}
a[i].textContent = s.join(separate);
}
else {
var t = a[i];
var p = document.createTextNode("");
t.replaceWith(p);
var f = document.createDocumentFragment();
f.appendChild(t);
var r = document.createDocumentFragment();
var e = t.firstElementChild;
while (e != null) {
e.replaceWith(document.createTextNode(replacement));
r.appendChild(e);
e = t.firstElementChild;
}
var s = t.textContent.split(separate);
for (var j = 0; j < c.length; j++) {
s[0] = s[0].replace(new RegExp(c[j][0], flag), c[j][1]);
}
var ss = s.join(separate).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(f);
}
}
}, 100);
})();