covconv

いまアッシュヒョークいるんだけどっいけそうならいこうっ!

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name           covconv
// @namespace      net.ghippos.covconv
// @description    いまアッシュヒョークいるんだけどっいけそうならいこうっ!
// @version        5
// @include        *
// @grant          none
// ==/UserScript==
(function () {
  var dic = [
    // 標準辞書
    {
      'ja_JP': 'アイコン',
      'kv_JP': 'アイヨン'
    },
    {
      'ja_JP': 'アピール',
      'kv_JP': 'アッピル'
    },
    {
      'ja_JP': 'アルバム',
      'kv_JP': 'アユバム'
    },
    {
      'ja_JP': 'アンコール',
      'kv_JP': 'アンコッル'
    },
    {
      'ja_JP': 'イメージ',
      'kv_JP': 'イメッジ'
    },
    {
      'ja_JP': '(イヤホン|イヤフォン)',
      'kv_JP': 'イヤヒョン'
    },
    {
      'ja_JP': 'インストール',
      'kv_JP': 'インスヨッル'
    },
    {
      'ja_JP': 'インチ',
      'kv_JP': 'インヨ'
    },
    {
      'ja_JP': 'インポータント',
      'kv_JP': 'インポッタンッ'
    },
    {
      'ja_JP': 'ウェブ',
      'kv_JP': 'ウェッブ'
    },
    {
      'ja_JP': 'エアコン',
      'kv_JP': 'エアヨン'
    },
    {
      'ja_JP': 'エナジードリンク',
      'kv_JP': 'エナヨードリンポ'
    },
    {
      'ja_JP': 'エロゲ',
      'kv_JP': 'エヨゲ'
    },
    {
      'ja_JP': 'オペレーティング',
      'kv_JP': 'オペレッティンッ'
    },
    {
      'ja_JP': 'カニクリームコロッケ',
      'kv_JP': 'コニクリッムカラッケ'
    },
    {
      'ja_JP': 'カラースキーム',
      'kv_JP': 'カラースキッム'
    },
    {
      'ja_JP': 'カップル',
      'kv_JP': 'カプル'
    },
    {
      'ja_JP': 'カーテン',
      'kv_JP': 'カッテン'
    },
    {
      'ja_JP': 'きめ(.)|キメ(.)',
      'kv_JP': 'キメ$1'
    },
    {
      'ja_JP': 'キーワード',
      'kv_JP': 'キッワーヨ'
    },
    {
      'ja_JP': 'クリーニング',
      'kv_JP': 'クリニンッ'
    },
    {
      'ja_JP': 'ケーブル',
      'kv_JP': 'ケッブル'
    },
    {
      'ja_JP': 'ココア',
      'kv_JP': 'ココヤ'
    },
    {
      'ja_JP': 'コンクリート',
      'kv_JP': 'コンクリッヨ'
    },
    {
      'ja_JP': 'コネクション',
      'kv_JP': 'コネクヒョン'
    },
    {
      'ja_JP': 'コンパイラ',
      'kv_JP': 'コンパイヤ'
    },
    {
      'ja_JP': 'コンパイル',
      'kv_JP': 'コンパイユ'
    },
    {
      'ja_JP': '(サイコロ|さいころ)',
      'kv_JP': 'サイコヨ'
    },
    {
      'ja_JP': 'サドル',
      'kv_JP': 'サドル'
    },
    {
      'ja_JP': 'サークル',
      'kv_JP': 'サックル'
    },
    {
      'ja_JP': 'シュリンク',
      'kv_JP': 'シュリンクッ'
    },
    {
      'ja_JP': 'ショップ',
      'kv_JP': 'チョップ'
    },
    {
      'ja_JP': 'ステーキ',
      'kv_JP': 'ステッキ'
    },
    {
      'ja_JP': 'スタック',
      'kv_JP': 'スタッポ'
    },
    {
      'ja_JP': 'スマホ',
      'kv_JP': 'スマヒョ'
    },
    {
      'ja_JP': 'スマートフォン',
      'kv_JP': 'スマーヨヒョン'
    },
    {
      'ja_JP': 'スパークリング',
      'kv_JP': 'スパークリンッ'
    },
    {
      'ja_JP': 'スリープ',
      'kv_JP': 'スリップ'
    },
    {
      'ja_JP': 'スーツケース',
      'kv_JP': 'スーユケース'
    },
    {
      'ja_JP': 'スーツ',
      'kv_JP': 'スッツ'
    },
    {
      'ja_JP': 'セックス',
      'kv_JP': 'セックヨ'
    },
    {
      'ja_JP': '(ソウル|ソール)',
      'kv_JP': 'ソッル'
    },
    {
      'ja_JP': 'ダイヤグラム',
      'kv_JP': 'ダイヤグラミュ'
    },
    {
      'ja_JP': 'ダブルクォーターパウンダー',
      'kv_JP': 'ダブユクォッターパウンヤー'
    },
    {
      'ja_JP': 'ダブルチーズバーガー',
      'kv_JP': 'ダブユチッズバッガー'
    },
    {
      'ja_JP': 'ダンボール',
      'kv_JP': 'ダンボッル'
    },
    {
      'ja_JP': 'テクニカル',
      'kv_JP': 'テクニカユ'
    },
    {
      'ja_JP': 'テクニシャン',
      'kv_JP': 'テクニヒャン'
    },
    {
      'ja_JP': 'テンション',
      'kv_JP': 'テンヨン'
    },
    {
      'ja_JP': 'ディスプレイ',
      'kv_JP': 'ディスプヨイ'
    },
    {
      'ja_JP': 'テーブル',
      'kv_JP': 'テーブユ'
    },
    {
      'ja_JP': 'トイレクイックル',
      'kv_JP': 'ヨイレクイックヨ'
    },
    {
      'ja_JP': 'トイレ',
      'kv_JP': 'ヨイレ'
    },
    {
      'ja_JP': 'ドル',
      'kv_JP': 'ヨル'
    },
    {
      'ja_JP': 'トートロジー',
      'kv_JP': 'トントロジー'
    },
    {
      'ja_JP': 'ノートパソコン',
      'kv_JP': 'ノーヨパヨヨン'
    },
    {
      'ja_JP': 'バイオリン',
      'kv_JP': 'バイヨリン'
    },
    {
      'ja_JP': 'バレーボール',
      'kv_JP': 'バリボール'
    },
    {
      'ja_JP': 'ハッカソン',
      'kv_JP': 'ハッカヨン'
    },
    {
      'ja_JP': 'バックアップ',
      'kv_JP': 'バッヨアップ'
    },
    {
      'ja_JP': 'バージョン',
      'kv_JP': 'バジヨン'
    },
    {
      'ja_JP': 'パーセント',
      'kv_JP': 'パッセント'
    },
    {
      'ja_JP': 'ビデオ',
      'kv_JP': 'ヴィデオ'
    },
    {
      'ja_JP': '(ビヤガーデン|ビアガーデン)',
      'kv_JP': 'ビヤガデッム'
    },
    {
      'ja_JP': 'ビーフジャーキー',
      'kv_JP': 'ビッフジャッキー'
    },
    {
      'ja_JP': 'ピロピロ',
      'kv_JP': 'ピロピロ'
    },
    {
      'ja_JP': 'フラグ',
      'kv_JP': 'フヤグ'
    },
    {
      'ja_JP': 'ブルートゥース',
      'kv_JP': 'ブルーヨーユ'
    },
    {
      'ja_JP': 'ブース',
      'kv_JP': 'ブース'
    },
    {
      'ja_JP': 'フロー',
      'kv_JP': 'フヨー'
    },
    {
      'ja_JP': 'フィルタリング',
      'kv_JP': 'フィルタリンッ'
    },
    {
      'ja_JP': 'フォロワー',
      'kv_JP': 'ヒョロヤー'
    },
    {
      'ja_JP': 'フォロー',
      'kv_JP': 'ヒョロー'
    },
    {
      'ja_JP': 'フォース',
      'kv_JP': 'ヒョース'
    },
    {
      'ja_JP': 'プラグイン',
      'kv_JP': 'プラギン'
    },
    {
      'ja_JP': 'プログラミング',
      'kv_JP': 'プヨグヤミンッ'
    },
    {
      'ja_JP': 'プログラム',
      'kv_JP': 'プヨグロム'
    },
    {
      'ja_JP': 'プログレス',
      'kv_JP': 'プヤグレス'
    },
    {
      'ja_JP': '(プロセッサ|プロセッサー)',
      'kv_JP': 'プヨセッサ'
    },
    {
      'ja_JP': 'プロフィール',
      'kv_JP': 'プロフィッル'
    },
    {
      'ja_JP': 'プロセス',
      'kv_JP': 'プヨセス'
    },
    {
      'ja_JP': 'プロモーション',
      'kv_JP': 'プヨモッション'
    },
    {
      'ja_JP': 'ベストエフォート',
      'kv_JP': 'ベストエフォット'
    },
    {
      'ja_JP': 'ベビースター',
      'kv_JP': 'ベビッスヤッ'
    },
    {
      'ja_JP': 'マグロ',
      'kv_JP': 'マグロ'
    },
    {
      'ja_JP': 'ミステイク',
      'kv_JP': 'ミステック'
    },
    {
      'ja_JP': 'ミーティング',
      'kv_JP': 'メッティン'
    },
    {
      'ja_JP': 'メイド',
      'kv_JP': 'メイヨ'
    },
    {
      'ja_JP': 'メール',
      'kv_JP': 'メーユ'
    },
    {
      'ja_JP': 'モンスター',
      'kv_JP': 'モンスヤー'
    },
    {
      'ja_JP': 'モーニング',
      'kv_JP': 'モッニン'
    },
    {
      'ja_JP': 'ライティング',
      'kv_JP': 'ライティンッ'
    },
    {
      'ja_JP': 'ラーメン',
      'kv_JP': 'ラメンッ'
    },
    {
      'ja_JP': 'リア充',
      'kv_JP': 'リアッジュ'
    },
    {
      'ja_JP': 'リサイクル',
      'kv_JP': 'リサイクユ'
    },
    {
      'ja_JP': 'ロックスター',
      'kv_JP': 'ロップスヤー'
    },
    {
      'ja_JP': 'ローマ',
      'kv_JP': 'ヨーマ'
    },
    {
      'ja_JP': '群論',
      'kv_JP': 'グンヨン'
    },
    {
      'ja_JP': '圏論',
      'kv_JP': 'ケンヨン'
    },
    
    // 英こふ辞書
    {
      'ja_JP': '(アイパッドエアー|iPad\sAir)',
      'kv_JP': 'アイパッヨエヤー'
    },
    {
      'ja_JP': '(アイパッド|iPad)',
      'kv_JP': 'アイパッヨ'
    },
    {
      'ja_JP': '(アイフォーン|アイフォン|iPhone)',
      'kv_JP': 'アイヒョーン'
    },
    {
      'ja_JP': '(アンドロイド|android)',
      'kv_JP': 'アンヨヨイヨ'
    },
    {
      'ja_JP': 'arch\slinux',
      'kv_JP': 'アチョーリナクス'
    },
    {
      'ja_JP': '(アーチ|arch)',
      'kv_JP': 'アチョー'
    },
    {
      'ja_JP': '(インストール|install)',
      'kv_JP': 'インスヨッル'
    },
    {
      'ja_JP': '(インティオス|インテュオス|intuos)',
      'kv_JP': 'インチュオス'
    },
    {
      'ja_JP': '(ウィンドウズ|ウィンドーズ|windows)',
      'kv_JP': 'ウィンヨッズ'
    },
    {
      'ja_JP': '(エックスビデオズ|エックスビデオ|xvideos|xvideo)',
      'kv_JP': 'エクスヴィデオズ'
    },
    {
      'ja_JP': '(オペラ|Opera)',
      'kv_JP': 'オペッラ'
    },
    {
      'ja_JP': 'GitHub',
      'kv_JP': 'ギッヨパブ'
    },
    {
      'ja_JP': '(グラブ|GRUB)',
      'kv_JP': 'グヤブ'
    },
    {
      'ja_JP': '(シンクパッド|ThinkPad)',
      'kv_JP': 'シンクパッヨ'
    },
    {
      'ja_JP': '(ジェンツー|gentoo)',
      'kv_JP': 'ジェンツー'
    },
    {
      'ja_JP': '(ジャバスクリプト|javascript)',
      'kv_JP': 'ジャヴァスクイプヨ'
    },
    {
      'ja_JP': '(ツイッター|twitter)',
      'kv_JP': 'ツイッタ'
    },
    {
      'ja_JP': '(ツイート|tweet)',
      'kv_JP': 'ツイッヨ'
    },
    {
      'ja_JP': '(テレビ|TV)',
      'kv_JP': 'ティーヴィー'
    },
    {
      'ja_JP': '(タブレット|tablet)',
      'kv_JP': 'タヨヨッヨ'
    },
    {
      'ja_JP': '(ネクサスファイブ|Nexus5|Nexus\s5)',
      'kv_JP': 'ネクサシュファヒヨ'
    },
    {
      'ja_JP': '(バーチャルボックス|virtualbox|virtual\sbox)',
      'kv_JP': 'バチャールボクス'
    },
    {
      'ja_JP': '(ブルーレイ|bluray)',
      'kv_JP': 'ブユレイ'
    },
    {
      'ja_JP': '(プレイヤー|プレイヤ|プレーヤー|プレーヤー|player)',
      'kv_JP': 'プレイヤッ'
    },
    {
      'ja_JP': '(プッシュ|push)',
      'kv_JP': 'プッユ'
    },
    {
      'ja_JP': '(ペースト|paste)',
      'kv_JP': 'ペッスト'
    },
    {
      'ja_JP': '(ボーカロイド|vocaloid)',
      'kv_JP': 'ボーカロイヨ'
    },
    {
      'ja_JP': '(マックミニ|mac\smini|macmini)',
      'kv_JP': 'マッヨミニ'
    },
    {
      'ja_JP': '(マックブックエアー|macbookair|macbook\sair)',
      'kv_JP': 'マッヨブックエヤー'
    },
    {
      'ja_JP': '(マックブックプロ|macbookpro|macbook\spro)',
      'kv_JP': 'マッヨブックプヨ'
    },
    {
      'ja_JP': '(マックブック|macbook)',
      'kv_JP': 'マッヨブック'
    },
    {
      'ja_JP': '(マック|mac)',
      'kv_JP': 'マッヨ'
    },
    {
      'ja_JP': '(メソッド|メゾット|メゾッド)',
      'kv_JP': 'メソッヨ'
    },
    {
      'ja_JP': '(リナックス|linux)',
      'kv_JP': 'リナクス'
    },
    
    // 推測変換
    {
      'ja_JP': 'アル([カ-コガ-ゴ])',
      'kv_JP': 'オル$1'
    },
    {
      'ja_JP': 'アル',
      'kv_JP': 'アヨ'
    },
    {
      'ja_JP': '([ァ-ヶ])(ト|ド|ゴ|テ)$',
      'kv_JP': '$1ヨ'
    },
    {
      'ja_JP': '([ァ-ヶ])(ト|ド|ゴ|テ)([^ァ-ォ])',
      'kv_JP': '$1ヨ$3'
    },
    {
      'ja_JP': '([ァ-ヶ])ース',
      'kv_JP': '$1ーユ'
    },
    {
      'ja_JP': '([ァ-ヶ])テ[^ァ-ォ]',
      'kv_JP': '$1テム'
    },
    {
      'ja_JP': '/([ァ-ヶ])ロ([ァ-ヶ])',
      'kv_JP': '$1ヤ$2'
    },
    {
      'ja_JP': '([ァ-ヶ])ショ([ァ-ヶ])',
      'kv_JP': '$1ヨ$2'
    },
    {
      'ja_JP': '([ァ-ヶ])ング',
      'kv_JP': '$1ンッ'
    },
    {
      'ja_JP': '(リン)([ァ-ヶ])',
      'kv_JP': '$1ポ'
    },
    {
      'ja_JP': '([ァ-ヶ])ー',
      'kv_JP': '$1-'
    },
    {
      'ja_JP': '(、|,|。|.)',
      'kv_JP': 'っ'
    }
  ]; 
  // end of dic[]
  
  var fullKana = new Array('ヴ', 'ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ザ', 'ジ', 'ズ', 'ゼ', 'ゾ', 'ダ', 'ヂ', 'ヅ', 'デ', 'ド', 'バ', 'ビ', 'ブ', 'ベ', 'ボ', 'パ', 'ピ', 'プ', 'ペ', 'ポ', 'ヲ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン');
  var halfKana = new Array('ヴ', 'ガ', 'ギ', 'グ', 'ゲ', 'ゴ', 'ザ', 'ジ', 'ズ', 'ゼ', 'ゾ', 'ダ', 'ヂ', 'ヅ', 'デ', 'ド', 'バ', 'ビ', 'ブ', 'ベ', 'ボ', 'パ', 'ピ', 'プ', 'ペ', 'ポ', 'ヲ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン');
  
  var regex_covconv = [];
  var regex_kana = [];
    
  function covconv(element) {
    convert(element);
    for (var childElement of element.childNodes) {
      covconv(childElement);
    }
  }
  
  function convert(element) {
    if(!isTextElement(element)){
      return;
    }
  
    var nodeValue = element.nodeValue;
    for (var i = 0; i < regex_covconv.length; i++) {
      if (nodeValue.match(regex_covconv[i])) {
        nodeValue = nodeValue.replace(regex_covconv[i], dic[i].kv_JP);
      }
    }
    nodeValue = toHalfWidth(nodeValue);
    element.nodeValue = nodeValue;
  }
  
  function isTextElement(element){
    if ('parentNode' in element && element.parentNode != null) {
      var nodeName = element.parentNode.nodeName.toLowerCase();
      if ((nodeName == 'style') || (nodeName == 'script') || (nodeName == 'frame')) {
        return false; 
      }
    }
    if (element.nodeName.toLowerCase() != '#text') {
      return false;
    }
    
    return true;
  }
  
  function toHalfWidth(nodeValue) {
    var str = nodeValue;
    for (var i = 0; i < regex_kana.length; i++) {
      str = str.replace(regex_kana[i], halfKana[i]);
    }
    return str;
  }
  
  // start 
  for (var i = 0; i < dic.length; i++) {
    regex_covconv[i] = new RegExp(dic[i].ja_JP, 'gmi');
  }
  for (var i = 0; i < fullKana.length; i++) {
    regex_kana[i] = new RegExp(fullKana[i], 'gmi');
  }
  covconv(window.document);
}) ();