Greasy Fork is available in English.

否定の生成

try to take over the world!

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         否定の生成
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  try to take over the world!
// @author       You
// @match        https://tokuken2020.github.io/bot/
// @match        https://tokuken2020.github.io/bot/*
// @match        http://worddrow.net/*
// @require      https://greasyfork.org/scripts/387509-yaju1919-library/code/yaju1919_library.js?version=755144
// @require      https://greasyfork.org/scripts/387086-tinysegmenter-js/code/TinySegmenterjs.js?version=714668
// @grant        GM.setValue
// @grant        GM.getValue
// @grant        GM.xmlHttpRequest
// ==/UserScript==

(function() {
    'use strict';
    var segmenter = new TinySegmenter();
    const yaju1919 = yaju1919_library;
    var sleep_flag = false;
    function getRev(word, callback, lastFlag){
        if(sleep_flag) return;
        yaju1919.get("http://worddrow.net/searchReverse?keyword="+word+"&",{
            success: r => {
                if(sleep_flag) return;
                var dom_parser = new DOMParser();
                const docs = dom_parser.parseFromString(r,"text/html");
                const elm = docs.querySelector(".base_word");
                if(elm) {
                    const base = elm.innerText;
                    if(base === word) {
                        sleep_flag = true;
                        const rev = docs.querySelector(".reverse_word").innerText;
                        return callback(rev);
                    }
                }
                if(lastFlag){
                    callback(sleep_flag ? null : lastFlag);
                    sleep_flag = false;
                }
            },
            fail: m => console.error(m)
        });
    }
    function objection(str,callback){
        segmenter.segment(str).filter(v=>{
            return ((
              exclude.indexOf(v) === -1 // 除外リストに一致しなかったなら
            ) && (
              !/^[^一-龠々〆ヵヶ]$/.test(v) // 漢字以外の一文字なら
            ))}).map((word, i, a) => {
            console.log(word, i, a)
            getRev(word, rev => {
                console.log(word,rev);
                callback(str.replace(word, rev));
            }, i === a.length - 1 ? str : null);
        });
    }
    yaju1919.win.objection = objection;
    yaju1919.win.s = s => segmenter.segment(s);
    const JOSHI = [
        "から","より","やら","なり","だの","ばかり","まで",
        "だけ","ほど","くらい","ぐらい","など","がてら","なぞ","なんぞ",
        "かり","ずつ","のみ","きり","こそ","でも","しか","さえ","ても",
        "でも","けれど","けれども","のに","ので","から","ながら","たり",
        "つつ","ところで","まま","ものの","とも","しん","かい","のに",
        "やら","ものか","こと","てよ","ことよ","もの","かしら","たら"
    ];
    const JODOSHI = [
        "げす","さす","させる","じゃ","せる","そうだ","たい","だす","だら",
        "だろう","ちゃう","です","てる","とき","とく","どす","なく","のだ",
        "はる","ひん","べし","へん","まい","ます","やす","やん","やんす",
        "よう","ようだ","らしい","られる","れる","んす","んず","んだ","んとす",
    ];
    const exclude = JOSHI.concat(JODOSHI);
})();