Greasy Fork 支持简体中文。

Techdirt?Fixer

Fix *some* special characters appearing as "?" on older Techdirt articles. As it is a simple script, expect false negatives and false positives.

// ==UserScript==
// @name         Techdirt?Fixer
// @namespace    http://wxw.moe/@dia
// @version      0.1.1
// @description  Fix *some* special characters appearing as "?" on older Techdirt articles. As it is a simple script, expect false negatives and false positives.
// @author       Dia
// @match        https://www.techdirt.com/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @run-at       document-end
// @license      Unlicense
// ==/UserScript==

//manually change these parameters to suit your needs
const USCRIPT_DEBUG_MODE = false; //set to true for useful console logs
const DEBUG_HIGHLIGHT_1 = "<span style=\"color:red\">";
const DEBUG_HIGHLIGHT_2 = "</span>";

const NEG_AUX_VERB = /n\?t(?![a-zA-Z0-9])/g;
const NEG_AUX_VERB_FIXED = "n't";

const LONE_DASH = /(?<=\S\s)\?(?=\s\S)/g;
const LONE_DASH_FIXED = "-";

const APHOS_S = /(?<=[a-zA-Z0-9])\?s(?=[^a-zA-Z0-9])/g;
const APHOS_S_FIXED = "'s";
const IM = /(?<=^|\s)I\?m(?=\s)/g;
const IM_FIXED = "I'm";
const RE_LL_D_VE = /(?<=^|\s)([a-zA-Z0-9]+)\?(re|ll|d|ve)(?=\s)/g;
const RE_LL_D_VE_FIXED = "$1'$2";
const QUOTES = /(?<=^|[\s\(])\?([^\s][^\?]*)\?(?=[\s\)]?)/g;
const QUOTES_FIXED = "\"$1\"";
const QUOTES_IN_LINK = /(<a\shref\=[\"\'][^\"\']*[\"\']>)\?([^\s][^\?]*)\?(<\/a>)/g;
const QUOTES_IN_LINK_FIXED = "$1\"$2\"$3";
const S_APHOS = /s\?(?=\s[a-z])/g; //This cannot catch s' that is immediately followed by a comma or a full stop.
const S_APHOS_FIXED = "s'";

(function() {
    'use strict';
    const postBodyElms = document.getElementsByClassName("postbody");

    let newNegAuxVerb = colorDebug(NEG_AUX_VERB_FIXED);
    let newLoneDash = colorDebug(LONE_DASH_FIXED);
    let newAphosS = colorDebug(APHOS_S_FIXED);
    let newIm = colorDebug(IM_FIXED);
    let newReLlDVe = colorDebug(RE_LL_D_VE_FIXED);
    let newQuotes = colorDebug(QUOTES_FIXED);
    let newQuotesInLink = colorDebug(QUOTES_IN_LINK_FIXED);
    let newSAphos = colorDebug(S_APHOS_FIXED);

    if (USCRIPT_DEBUG_MODE) console.log("Techdirt?Fixer runs in debugging mode");

    for (let i=0; i < postBodyElms.length; i++){
        let postBodyContent = postBodyElms[i].innerHTML;
        postBodyContent = postBodyContent.replace(NEG_AUX_VERB,newNegAuxVerb);
        postBodyContent = postBodyContent.replace(LONE_DASH,newLoneDash);
        postBodyContent = postBodyContent.replace(APHOS_S,newAphosS);
        postBodyContent = postBodyContent.replace(IM,newIm);
        postBodyContent = postBodyContent.replace(RE_LL_D_VE,newReLlDVe);
        postBodyContent = postBodyContent.replace(QUOTES,newQuotes);
        postBodyContent = postBodyContent.replace(QUOTES_IN_LINK,newQuotesInLink);
        postBodyContent = postBodyContent.replace(S_APHOS,newSAphos);
        postBodyElms[i].innerHTML = postBodyContent;
    }

    function colorDebug(message){
        if (USCRIPT_DEBUG_MODE){
            return DEBUG_HIGHLIGHT_1 + message + DEBUG_HIGHLIGHT_2;
        }
        else return message;
    }

})();