User:Gqqnb/js/新华社禁用词修复.js

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

/*
脚本会修正条目上的禁用词和错误对台用语。
当gqqnbig_fixPrcForbiddenWords_fixInSourceCode选项开启时,也会修正源代码上的禁用词。
此脚本已尽量测试,但若出错,其造成的后果由使用者负责(无论是否开启gqqnbig_fixPrcForbiddenWords_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.fixPrcForbiddenWords = (function ()
{
    var replacements = [
        [/中华民国国歌/g, "中国台湾区歌"],
        [/中华民国国旗/g, "中国台湾区旗"],
        [/中华民国总统/g, "中国台湾领导人"],
        [/中华民国副总统/g, "中国台湾副领导人"],
        [/中华民国大总统/g, "中国台湾大领导人"],
        [/中华民国宪法/g, "台湾地区的基本法"],
        [/中华民国法律/g, "台湾地区的有关规定"],
        [/中华民国/g, "台湾当局"],
        [/国立(\S+?)大学/g, "“$1大学”"],
        [/国立故宫博物院/g, "“故宫博物院”"],

        [/立法院/g, "立法主管部门"],
        [/行政院/g, "行政主管部门"],
        [/监察院/g, "监察主管部门"],
        [/司法院/g, "司法主管部门"],
        [/考试院/g, "考试主管部门"],

        [/行政院新闻局/g, "新闻主管部门"],

        [/反共爱国同盟/g, "某反华组织"],
        [/三民主义统一中国大同盟/g, "某反华组织"],

        [/国小/g, "小学"],
        [/国中/g, "中学"],

        [/国父纪念馆/g, "中山纪念馆"],
        [/国父/g, "孙中山"],

        [/中华民国护照/g, "台湾旅行证件"],
        [/台湾护照/g, "台湾旅行证件"],

        [/中台合资/g, "跨省合资"],

        [/台语/g, "闽南语"],
        [/小三通/g, "福建沿海与金门、马祖地区直接往来"]
    ];

    var additionalReplacements = [
        [/(\S\S)大陆/g, function ($0, $1)
        {
            if ($1 === "中国")
                return $0;
            else
                return $1 + "祖国大陆";
        }],
        [/总统/g, "领导人"],
        [/法律/g, "台湾地区的有关规定"],
        [/宪法/g, "台湾地区的基本法"],
        [/护照/g, "台湾旅行证件"],
        [/国立/g, ""],
        [/引渡/g, "遣返"],
        [/偷渡/g, "私渡"],
        [/院长/g, "主管"],
        [/违宪/g, "违规"],
        [/原住民/g, "台湾少数民族"],
        [/白皮书/g, "小册子"],
        [/中央/g, "省级"],
        
        [/国内/g, "岛内"],
        [/全国/g, "全台"]
    ];

    var quotes = [
        "行政院主计处",
        "选委会",
        "国立",
        "中华台北",
        "行政院长",
        "立法委员",
        "台湾独立",
        "台独",
        "中华道教文化团体联合会",
        "中华两岸婚姻协调促进会",
        "福摩萨",
        "中国事务部",
        "福利国连线",
        "正义连线",
        "中华旅行社",
        "经济文化代表处",
        "经济文化办事处",
        "中国钢铁公司",
        "中华电信"
    ];

    var additionalQuotes = [
        //"副院长",
        //"正院长",
        //"院长"
    ];

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


            var startTime = new Date().getTime();
            var walker = document.createTreeWalker(document.getElementById("content"), 4);
            var textNode = walker.nextNode();
            var isTaiwanTopic = mw.config.get("wgCategories").toString().match(/(台湾|台灣|臺灣)/)!=null;
            while (textNode)
            {
                if (window.gqqnbig_fixPrcForbiddenWords_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 (isTaiwanTopic)
                    {
                        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 (isTaiwanTopic)
                    {
                        for (var i = 0; i < additionalQuotes.length; i++)
                            textNode.nodeValue = textNode.nodeValue.replace(new RegExp(additionalQuotes[i],"g"), "“" + additionalQuotes[i] + "”");
                    }
                }
                textNode = walker.nextNode();
            }
            //alert("Finish");
            //console.log(new Date().getTime() - startTime);
        }
    };
})();
//$(gqqnbig.fixPrcForbiddenWords.fix);

gqqnbig.fixPrcForbiddenWords.fix();