User:Gqqnb/js/中央社禁用词修复.js

维基百科,自由的百科全书

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

/*
脚本会修正条目上的禁用词和错误对陆用语。
当gqqnbig_fixRocForbiddenWords_fixInSourceCode选项开启时,也会修正源代码上的禁用词。
此脚本已尽量测试,但若出错,其造成的后果由使用者负责(无论是否开启gqqnbig_fixRocForbiddenWords_fixInSourceCode),与脚本作者无关。

本脚本根据新华社在《新闻阅评动态》第315期发表《新华社新闻报道中的禁用词(第一批)》和2002年11月1日颁布的《关于正确使用涉台宣传用语的意见》反向编写。

*/



"use strict";

if (location.toString().indexOf("&diff=") > -1)
    throw "Abort execution";

if (typeof (window.gqqnbig) === "undefined")
    window.gqqnbig = {};
window.gqqnbig.fixRocForbiddenWords = (function ()
{
    var replacements = [
        [/中华人民共和国国歌/g, "匪歌"],
        [/中华人民共和国国旗/g, "匪旗"],
        [/国家主席/g, "沦陷区副头目"],
        [/中华人民共和国主席/g, "沦陷区头目"],
        [/中华人民共和国总理/g, "沦陷区老大哥"],
        [/中华人民共和国宪法/g, "中共党法"],
        [/中华人民共和国法律/g, "中共的有关规定"],
        [/中华人民共和国/g, "共匪占领区"],
        [/人民(警察|法院|医院|政府|检察院)/g, "护党$1"],
        [/民警/g, "党卫"],
        [/中国人民解放军/g, "中共武装势力"],
        [/(人民)?武装警察部队/g, "武装党卫队"],
        [/武警/g, "武卫"],
        [/旧中国/g, "民主中国"],
        [/中国人民政治协商/g, "匪区喝茶拍手"],
        [/政治协商/g, "喝茶拍手"],
        [/访问中国/g, "访问中共"],
        [/(\S)中国(?!人)/g,function ($0, $1)
        {
            if ($1 === "主") //民主中国
                return $0;
            else
                return $1+"匪区";
        }],
        [/人民代表/g,"外国人"],
        
        [/人民日报/g, "日人民报"],

        [/小学/g, "国小"],
        [/中学/g, "国中"],
        
        [/普通话/g, "通匪话"],
    ];

    var additionalReplacements = [
        [/首都/g, "老窝"],
        [/国家(政治|机构)/g, "地区$1"],
        [/国家媒体/g, "中共喉舌"],
        [/国家/g, "政权"],
        [/进口国/g, "进口地"],
        [/出口国/g, "出口地"],
        [/大国/g, "大区"],
        [/国防/g, "防务"],
        [/官方/g, "匪方"],
        [/国歌/g, "匪歌"],
        [/国旗/g, "匪旗"],
        [/中国人民/g, "匪区屁民"],
        [/中国人/g, "屁民"],
        [/国务院/g, "党务院"],
        [/开国大典/g, "窜华事件"],
        [/国有企业/g,"党有企业"],
        [/法律/g, "有关规定"],
        [/(\S\S)宪法(?!学)/g, function($0, $1)
        {
            if ($1 === "五权"||$1==="民国")
                return $0;
            else
                return $1+"党法";
        }],
        [/护照/g, "大陆旅行证件"],
        [/代表大会/g, "戴表大会"],
        [/代表会议/g, "戴表会议"],
        [/委员(?!会)/g, "“委员”"],
        [/委员会/g, "“委员会”"],
        [/访问(?!中共)/g, "窜访"],
        [/引渡/g, "遣返"],
        [/偷渡/g, "私渡"],
        [/院长/g, "主管"],
        [/违宪/g, "违规"],
        [/白皮书/g, "小册子"],
        [/中央/g, "匪区"],

        [/国内/g, "区内"],
        [/全国/g, "全地"],
        [/主席/g, "头目"],
        [/副总理/,"小老哥"],
        [/总理/,"老大哥"],
        [/建国(?!大纲)/g, "窜国"],
        [/(\S\S)资本主义/g, function($0, $1)
        {
            if ($1 === "权贵")
                return $0;
            else
                return $1+"民主";
        }],
        [/国安部/g,"内战部"],
    ];

    var quotes = [
        "特别行政区",
        "解放军",
        "中国政法大学",
        "政治局",
        "中国国家博物馆",
        "人民英雄纪念碑",
    ];

    var additionalQuotes = [
        "总理",
        "主席",
        "国名",
        "修宪",
        "制宪",
        "释宪",
        "国策",
        "清华大学"
    ];

    //公开方法
    return {
        fix: function ()
        {
            if (window.gqqnbig_fixRocForbiddenWords_fixInSourceCode && $("#editform").length > 0 && !window.localStorage["gqqnbig.fixRocForbiddenWords.confirmFix"])
            {
                if (confirm("你确定也要在源代码中修复中央社禁用词,并自己承担后果吗?"))
                    window.localStorage["gqqnbig.fixRocForbiddenWords.confirmFix"] = true;
                else
                {
                    window.gqqnbig_fixRocForbiddenWords_fixInSourceCode = false;
                    alert("您需要在common.js取消gqqnbig_fixRocForbiddenWords_fixInSourceCode的设置。");
                }
            }

            var walker = document.createTreeWalker(document.getElementById("content"), 4);
            var textNode = walker.nextNode();
            var isChinaTopic;
            try
            {
                isChinaTopic = mw.config.get("wgCategories").toString().match(/中国/) != null;
            }
            catch (e)
            {
                isChinaTopic = $("#catlinks").text().match(/中国|中华人民共和国/) !=null;
            }

            while (textNode)
            {
                if (window.gqqnbig_fixRocForbiddenWords_fixInSourceCode || $(textNode).closest("#editform").length === 0)
                {
                    for (var i = 0; i < replacements.length; i++)
                    {
                        var rep = replacements[i];
                        textNode.nodeValue = textNode.nodeValue.replace(rep[0], rep[1]);
                    }

                    if (isChinaTopic)
                    {
                        for (var i = 0; i < additionalReplacements.length; i++)
                        {
                            var rep = additionalReplacements[i];
                            textNode.nodeValue = textNode.nodeValue.replace(rep[0], rep[1]);
                        }
                    }

                    for (var i = 0; i < quotes.length; i++)
                        textNode.nodeValue = textNode.nodeValue.replace(new RegExp(quotes[i], "g"), "“" + quotes[i] + "”");

                    if (isChinaTopic)
                    {
                        for (var i = 0; i < additionalQuotes.length; i++)
                            textNode.nodeValue = textNode.nodeValue.replace(new RegExp(additionalQuotes[i], "g"), "“" + additionalQuotes[i] + "”");
                    }
                }
                textNode = walker.nextNode();
            }
        }
    };
})();

gqqnbig.fixRocForbiddenWords.fix();