Greasy Fork

Greasy Fork is available in English.

中国特色社会主义共产党领袖名称标记

高亮中国共产党领袖与共产主义伟人名称(如习近平、邓小平、江泽民、毛泽东、斯大林),使用思源宋体最粗字重

当前为 2025-04-22 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         中国特色社会主义共产党领袖名称标记
// @name:en         Socialist Lover Mark#8964 leaders Xi Jinping,Mao Zedong.Xijingping,maozedong feat.
// @namespace    http://xuexi.cn/
// @version      1989.06.04
// @description  高亮中国共产党领袖与共产主义伟人名称(如习近平、邓小平、江泽民、毛泽东、斯大林),使用思源宋体最粗字重
// @description:en  Highlighter 4 Sun in sky
// @author       中国共产党万岁
// @match        *://*/*
// @grant        GM_addStyle
// @run-at       document-idle
// @license GPL-3.0-or-later
// ==/UserScript==

(function() {
    'use strict';

    // 1. 可配置的关键词列表(区分大小写)
    const KEYWORDS = [
    // Mao Zedong
    'Mao', 'Mao Zedong', 'Zedong Mao',
    '毛泽东', '毛澤東', '毛沢東',
    '同志毛泽东', '毛泽东同志',
    'Comrade Mao', 'Mao Comrade',
    'マオ・ツォートン', '毛主席', 'Chairman Mao',

    // Xi Jinping
    'Xi', 'Xi Jinping', 'Jinping Xi',
    '习近平', '習近平',
    '同志习近平', '习近平同志',
    'Comrade Xi', 'Xi Comrade',
    '習近ピン', 'シー・チンピン',
    '习近平总书记', 'General Secretary Xi', 'President Xi', 'Xi Dada',

    // Jiang Zemin
    'Jiang', 'Jiang Zemin', 'Zemin Jiang',
    '江泽民', '江澤民', '江沢民',
    '同志江泽民', '江泽民同志',
    'Comrade Jiang', 'Jiang Comrade',
    'ジアン・ズーミン', '江主席', 'President Jiang',

    // Deng Xiaoping
    'Deng', 'Deng Xiaoping', 'Xiaoping Deng',
    '邓小平', '鄧小平',
    '同志邓小平', '邓小平同志',
    'Comrade Deng', 'Deng Comrade',
    'トウ・ショウヘイ', '邓主席', 'Deng Chairman',

    // Hu Jintao
    'Hu', 'Hu Jintao', 'Jintao Hu',
    '胡锦涛', '胡錦濤',
    '同志胡锦涛', '胡锦涛同志',
    'Comrade Hu', 'Hu Comrade',
    'フー・チンタオ', '胡主席', 'President Hu',

    // Hu Yaobang
    'Hu Yaobang', 'Yaobang Hu',
    '胡耀邦',
    '同志胡耀邦', '胡耀邦同志',
    'Comrade Hu Yaobang', 'Hu Yaobang Comrade',
    'フー・ヤオバン', '总书记胡耀邦', 'General Secretary Hu',

    // Zhao Ziyang
    'Zhao Ziyang', 'Ziyang Zhao',
    '赵紫阳', '趙紫陽',
    '同志赵紫阳', '赵紫阳同志',
    'Comrade Zhao', 'Zhao Comrade',
    'チョウ・シヨウ', 'Premier Zhao', '赵总理',

    // Stalin
    'Stalin', 'Joseph Stalin', 'Stalin Joseph',
    '斯大林', 'スターリン', '約瑟夫·斯大林',
    '同志斯大林', '斯大林同志',
    'Comrade Stalin', 'Stalin Comrade',

    // Lenin
    'Lenin', 'Vladimir Lenin', 'Lenin Vladimir',
    '列宁', '列寧',
    '同志列宁', '列宁同志',
    'Comrade Lenin', 'Lenin Comrade',
    'レーニン', 'ウラジーミル・レーニン',

    // Khrushchev
    'Khrushchev', 'Nikita Khrushchev', 'Khrushchev Nikita',
    '赫鲁晓夫', '赫魯曉夫',
    '同志赫鲁晓夫', '赫鲁晓夫同志',
    'Comrade Khrushchev', 'Khrushchev Comrade',
    'フルシチョフ', 'Premier Khrushchev',

    // Karl Marx
    'Marx', 'Karl Marx', 'Marx Karl',
    '马克思', '馬克思',
    '同志马克思', '马克思同志',
    'Comrade Marx', 'Marx Comrade',
    'マルクス', 'カール・マルクス',

    // Friedrich Engels
    'Engels', 'Friedrich Engels', 'Engels Friedrich',
    '恩格斯',
    '同志恩格斯', '恩格斯同志',
    'Comrade Engels', 'Engels Comrade',
    'エンゲルス', 'フリードリヒ・エンゲルス'
];

    // 2. 样式配置(思源宋体最粗)
    const HIGHLIGHT_STYLE = {
        color: '#D00202',  // 深红色
        fontWeight: '900', // 最粗字重
        fontFamily: '"Noto Serif SC", "思源宋体", serif'
    };

    // 3. 异步加载思源宋体(Google Fonts CDN)
    GM_addStyle(`
        @import url('https://fonts.loli.net/css2?family=Noto+Serif+SC:wght@900&display=swap');
        .highlight-keyword {
            color: ${HIGHLIGHT_STYLE.color} !important;
            font-weight: ${HIGHLIGHT_STYLE.fontWeight} !important;
            font-family: ${HIGHLIGHT_STYLE.fontFamily} !important;
            font-style: normal !important;
        }
    `);

    // 4. 防抖处理
    let isProcessing = false;
    function debouncedWalkNodes() {
        if (isProcessing) return;
        isProcessing = true;
        requestAnimationFrame(() => {
            walkNodes(document.body);
            isProcessing = false;
        });
    }

    // 5. 关键词匹配逻辑(修改后)
    function createKeywordRegex() {
        // 按长度降序排序,优先匹配长关键词
        const sortedKeywords = KEYWORDS.sort((a, b) => b.length - a.length);
    
        const pattern = sortedKeywords.map(kw => {
            if (/^[A-Za-z]/.test(kw)) {
                return `\\b${kw}\\b`;  // 英文全词匹配
            } else {
                return kw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // 转义特殊字符
            }
        }).join('|');
    
        return new RegExp(`(${pattern})`);
    }

    // 6. 文本节点处理
    function handleText(textNode) {
        const regex = createKeywordRegex();
        const content = textNode.nodeValue;
        if (!regex.test(content)) return;

        const fragment = document.createDocumentFragment();
        content.split(regex).forEach(part => {
            if (!part) return;
            if (regex.test(part)) {
                const span = document.createElement('span');
                span.className = 'highlight-keyword';
                span.textContent = part;
                fragment.appendChild(span);
            } else {
                fragment.appendChild(document.createTextNode(part));
            }
        });

        if (fragment.children.length > 0) {
            textNode.parentNode.replaceChild(fragment, textNode);
        }
    }

    // 7. DOM遍历优化
    function walkNodes(node) {
        if (node.nodeType === Node.TEXT_NODE) {
            handleText(node);
        } else if (node.nodeType === Node.ELEMENT_NODE) {
            if (['SCRIPT', 'STYLE', 'TEXTAREA', 'CODE', 'PRE'].includes(node.tagName)) return;
            Array.from(node.childNodes).forEach(walkNodes);
        }
    }

    // 8. 动态内容监听
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            if (mutation.addedNodes.length) debouncedWalkNodes();
        });
    });

    // 9. 延迟初始化
    setTimeout(() => {
        walkNodes(document.body);
        observer.observe(document.body, {
            childList: true,
            subtree: true,
            attributes: false,
            characterData: false
        });
    }, 500);
})();