{ const els = document.querySelectorAll('.thre table blockquote'); const convertLongVowels = { 'ァ': ['あ', 'ア', 'ア', 'か', 'カ', 'カ', 'が', 'ガ', 'ガ', 'さ', 'サ', 'サ', 'ざ', 'ザ', 'ザ', 'た', 'タ', 'タ', 'だ', 'ダ', 'ダ', 'な', 'ナ', 'ナ', 'は', 'ハ', 'ハ', 'ば', 'バ', 'バ', 'ま', 'マ', 'マ', 'ら', 'ラ', 'ラ', 'や', 'ヤ', 'ヤ', 'わ', 'ワ', 'ワ'], 'ィ': ['い', 'イ', 'イ', 'き', 'キ', 'キ', 'ぎ', 'ギ', 'ギ', 'し', 'シ', 'シ', 'じ', 'ジ', 'ジ', 'ち', 'チ', 'チ', 'ぢ', 'ヂ', 'ヂ', 'に', 'ニ', 'ニ', 'ひ', 'ヒ', 'ヒ', 'び', 'ビ', 'ビ', 'み', 'ミ', 'ミ', 'り', 'リ', 'リ'], 'ゥ': ['う', 'ウ', 'ウ', 'く', 'ク', 'ク', 'ぐ', 'グ', 'グ', 'す', 'ス', 'ス', 'ず', 'ズ', 'ズ', 'つ', 'ツ', 'ツ', 'づ', 'ヅ', 'ヅ', 'ぬ', 'ヌ', 'ヌ', 'ふ', 'フ', 'フ', 'ぶ', 'ブ', 'ブ', 'む', 'ム', 'ム', 'る', 'ル', 'ル', 'ゆ', 'ユ', 'ユ'], 'ェ': ['え', 'エ', 'エ', 'け', 'ケ', 'ケ', 'げ', 'ゲ', 'ゲ', 'せ', 'セ', 'セ', 'ぜ', 'ゼ', 'ゼ', 'て', 'テ', 'テ', 'で', 'デ', 'デ', 'ね', 'ネ', 'ネ', 'へ', 'ヘ', 'ヘ', 'べ', 'ベ', 'ベ', 'め', 'メ', 'メ', 'れ', 'レ', 'レ'], 'ォ': ['お', 'オ', 'オ', 'こ', 'コ', 'コ', 'ご', 'ゴ', 'ゴ', 'そ', 'ソ', 'ソ', 'ぞ', 'ゾ', 'ゾ', 'と', 'ト', 'ト', 'ど', 'ド', 'ド', 'の', 'ノ', 'ノ', 'ほ', 'ホ', 'ホ', 'ぼ', 'ボ', 'ボ', 'も', 'モ', 'モ', 'ろ', 'ロ', 'ロ', 'よ', 'ヨ', 'ヨ'], 'ヲ': ['を', 'ヲ', 'ヲ'], 'ン': ['ん', 'ン', 'ン'], }; const isZenkakuKigou = (word) => /[\p{P}\p{S}ー]/gu.test(word); const isHankakuKigou = (word) => /[\u0020-\u002F\u003A-\u0040\u005B-\u0060\u007B-\u007E]/g.test(word); const isRandom = () => Boolean(Math.floor(Math.random() * 2)); const makeRandom = ({ isHeart = false, isTilde = false }) => { const randomNumber = isHeart ? Math.floor(Math.random() * 3) + 1 : isTilde ? isRandom() : 0; let str = ''; for (let i = 0; i < randomNumber; i++) { str += isHeart ? '❤️' : isTilde ? '~' : ''; } return str; }; const values = Object.values(convertLongVowels); const keys = Object.keys(convertLongVowels); for (const el of els) { const text = el.innerHTML; const lines = text.split('
'); const newLines = []; for (const line of lines) { if (line.startsWith('>') || line.startsWith('<')) { newLines.push(line); continue; } let wordSplit = [...line]; let lastWord = wordSplit[wordSplit.length - 1]; while (isZenkakuKigou(lastWord) || isHankakuKigou(lastWord)) { wordSplit.length = wordSplit.length - 1; lastWord = wordSplit[wordSplit.length - 1]; } let res = ''; for (let i=0; i < values.length; i++) { const value = values[i]; if (value.includes(lastWord)) { res = keys[i]; break; } } if (res !== '') { const tilde = makeRandom({ isTilde: true }); const heart = makeRandom({ isHeart: true }); const ellipsis = tilde === '' && isRandom() ? '…' : ''; const plusHaaan = res === 'ァ' && isRandom() ? 'ハァ' : ''; const result = `${wordSplit.join('')}${res + plusHaaan + tilde}ン${ellipsis + heart}`; newLines.push(result); } } if (newLines.length) { const newText = newLines.join('
'); el.innerHTML = newText; } } document.querySelectorAll('a[href]').forEach((el) => { if (el.textContent.startsWith('そうだね')) { const heart = makeRandom({ isHeart: true }); el.innerText = el.innerText.replace('そうだね', `そうだねェ~ン${heart}`); } }); };