Glagolitic Transliterator (Latin + Cyrillic)

Transliterates both Cyrillic and Latin text into Glagolitic script

// ==UserScript==
// @name         Glagolitic Transliterator (Latin + Cyrillic)
// @namespace    http://glagolitic.page/
// @version      1.1
// @description  Transliterates both Cyrillic and Latin text into Glagolitic script
// @match        *://*/*
// @grant        none
// @license MIT
// @run-at       document-idle
// ==/UserScript==

(function () {
  'use strict';

  // Combined mapping
  const map = {
    // Cyrillic
    'а': 'ⰰ', 'б': 'ⰱ', 'в': 'ⰲ', 'г': 'ⰳ', 'д': 'ⰴ', 'е': 'ⰵ',
    'ж': 'ⰶ', 'з': 'ⰸ', 'и': 'ⰺ', 'ј': 'ⰻ', 'к': 'ⰽ', 'л': 'ⰾ',
    'м': 'ⰿ', 'н': 'ⱀ', 'о': 'ⱁ', 'п': 'ⱂ', 'р': 'ⱃ', 'с': 'ⱄ',
    'т': 'ⱅ', 'у': 'ⱆ', 'ф': 'ⱇ', 'х': 'ⱈ', 'ц': 'ⱌ', 'ч': 'ⱍ',
    'ш': 'ⱎ', 'щ': 'ⱋ', 'ъ': 'ⱏ', 'ы': 'ⰽⰺ', 'ь': 'ⰿ',
    'э': 'ⰵ', 'ю': 'ⱗ', 'я': 'ⱘ',

    'А': 'ⰰ', 'Б': 'ⰱ', 'В': 'ⰲ', 'Г': 'ⰳ', 'Д': 'ⰴ', 'Е': 'ⰵ',
    'Ж': 'ⰶ', 'З': 'ⰸ', 'И': 'ⰺ', 'Ј': 'ⰻ', 'К': 'ⰽ', 'Л': 'ⰾ',
    'М': 'ⰿ', 'Н': 'ⱀ', 'О': 'ⱁ', 'П': 'ⱂ', 'Р': 'ⱃ', 'С': 'ⱄ',
    'Т': 'ⱅ', 'У': 'ⱆ', 'Ф': 'ⱇ', 'Х': 'ⱈ', 'Ц': 'ⱌ', 'Ч': 'ⱍ',
    'Ш': 'ⱎ', 'Щ': 'ⱋ', 'Ъ': 'ⱏ', 'Ы': 'ⰽⰺ', 'Ь': 'ⰿ',
    'Э': 'ⰵ', 'Ю': 'ⱗ', 'Я': 'ⱘ',

    // Latin (approximated)
    'a': 'ⰰ', 'b': 'ⰱ', 'c': 'ⱌ', 'č': 'ⱍ', 'ć': 'ⱍ', 'd': 'ⰴ',
    'e': 'ⰵ', 'f': 'ⱇ', 'g': 'ⰳ', 'h': 'ⱈ', 'i': 'ⰺ', 'j': 'ⰻ',
    'k': 'ⰽ', 'l': 'ⰾ', 'm': 'ⰿ', 'n': 'ⱀ', 'o': 'ⱁ', 'p': 'ⱂ',
    'q': 'ⰽ', 'r': 'ⱃ', 's': 'ⱄ', 'š': 'ⱎ', 't': 'ⱅ', 'u': 'ⱆ',
    'v': 'ⰲ', 'w': 'ⰲ', 'x': 'ⱈ', 'y': 'ⰺ', 'z': 'ⰸ', 'ž': 'ⰶ',

    'A': 'ⰰ', 'B': 'ⰱ', 'C': 'ⱌ', 'Č': 'ⱍ', 'Ć': 'ⱍ', 'D': 'ⰴ',
    'E': 'ⰵ', 'F': 'ⱇ', 'G': 'ⰳ', 'H': 'ⱈ', 'I': 'ⰺ', 'J': 'ⰻ',
    'K': 'ⰽ', 'L': 'ⰾ', 'M': 'ⰿ', 'N': 'ⱀ', 'O': 'ⱁ', 'P': 'ⱂ',
    'Q': 'ⰽ', 'R': 'ⱃ', 'S': 'ⱄ', 'Š': 'ⱎ', 'T': 'ⱅ', 'U': 'ⱆ',
    'V': 'ⰲ', 'W': 'ⰲ', 'X': 'ⱈ', 'Y': 'ⰺ', 'Z': 'ⰸ', 'Ž': 'ⰶ'
  };

  function transliterateToGlagolitic(text) {
    return text.split('').map(char => map[char] || char).join('');
  }

  const walker = document.createTreeWalker(document.body, NodeFilter.SHOW_TEXT, {
    acceptNode: node => {
      const tag = node.parentNode?.tagName?.toUpperCase();
      return tag && !['SCRIPT', 'STYLE', 'TEXTAREA', 'INPUT'].includes(tag)
        ? NodeFilter.FILTER_ACCEPT
        : NodeFilter.FILTER_REJECT;
    }
  });

  let node;
  while ((node = walker.nextNode())) {
    if (/[A-Za-zА-Яа-яЉљЊњЋћЏџ]/.test(node.nodeValue)) {
      node.nodeValue = transliterateToGlagolitic(node.nodeValue);
    }
  }

  console.log("🔠 Latin and Cyrillic transliterated to Glagolitic.");
})();

QingJ © 2025

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