[ create a new paste ] login | about

Link: http://codepad.org/9ZeaJgND    [ raw code | fork ]

Plain Text, pasted on Mar 26:
//【登録場所】 レス表示、選択テキスト
//【ラベル】 レス抽出ダイアログ
//【コマンド1】 $SCRIPT filter.js 
//【コマンド2】 $SCRIPT filter.js ignoreCase (大文字・小文字を無視)
//【コマンド3】 $SCRIPT filter.js ignoreKana (平仮名・片仮名を無視)
//【コマンド3】 $SCRIPT filter.js ignoreZenHan (全角・半角を無視)
//【コマンド4】 $SCRIPT filter.js ignoreZenHan ignoreKana (複合その1)
//【コマンド5】 $SCRIPT filter.js ignoreZenHan ignoreKana ignoreCase(複合その2)
//【コマンド6】 $SCRIPT filter.js toClipboard (内容をクリップボードへ送る)
//【コマンド7】 $SCRIPT filter.js filterRes (抽出キーワードでフィルタ)

function toHiraganaCase(string){
  var buffer="";
  for(var i = 0; i < string.length; i++){
    var c = string.charCodeAt(i);
    var KATAKANA_SMALL_A=12449;
    var HIRAGANA_SMALL_A=12353;
    var KATAKANA_NN=12531;
    if(c >= KATAKANA_SMALL_A && c <= KATAKANA_NN){
      buffer += String.fromCharCode(c - KATAKANA_SMALL_A +HIRAGANA_SMALL_A);
    }else{
      buffer += string[i];
    }
  };
  return buffer;
}

function toZenkakuCase(string){
  var hankaku = new Array
    ("ガ", "ギ", "グ", "ゲ", "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", "ヂ", "ヅ", "デ", "ド",
     "バ", "パ", "ビ", "ピ", "ブ", "プ", "ベ", "ペ", "ボ", "ポ", "ヴ", "ァ", "ア", "ィ", "イ", "ゥ",
     "ウ", "ェ", "エ", "ォ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ", "ソ", "タ", "チ", "ッ",
     "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ", "ヘ", "ホ", "マ", "ミ", "ム", "メ", "モ",
     "ャ", "ヤ", "ュ", "ユ", "ョ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ", "ヲ", "ン", "。", "「", "」", "、", "・", "ー", "゙", "゚");
  var zenkaku  = new Array
    ("ガ", "ギ", "グ", "ゲ", "ゴ", "ザ", "ジ", "ズ", "ゼ", "ゾ", "ダ", "ヂ", "ヅ", "デ", "ド",
     "バ", "パ", "ビ", "ピ", "ブ", "プ", "ベ", "ペ", "ボ", "ポ", "ヴ", "ァ", "ア", "ィ", "イ",
     "ゥ", "ウ", "ェ", "エ", "ォ", "オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ",
     "ソ", "タ", "チ", "ッ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ", "ノ", "ハ", "ヒ", "フ",
     "ヘ", "ホ", "マ", "ミ", "ム", "メ", "モ", "ャ", "ヤ", "ュ", "ユ", "ョ", "ヨ", "ラ", "リ",
     "ル", "レ", "ロ", "ワ", "ヲ", "ン", "。", "「", "」", "、", "・", "ー", "゛", "゜");
  for (var i = 0; i <= hankaku.length; i++) {
    while (string.indexOf(hankaku[i]) >= 0){
      string = string.replace(hankaku[i], zenkaku[i]);
    }
  }
 
  return string;
}

function toLowerCase(string){
  return string.toLowerCase();
}

function search(string, key){
  var result = new Array();
  var th = v2c.context.thread;
  for(var i = 0; i < th.localResCount; i++){
    var res = th.getRes(i);
    var message = key(res.message);
    var string = key(string);
    if(message.indexOf(string) != -1){
      result.push(res);
    }
  }
  return result;
}

Array.prototype.contains = function(obj){
  for(var i=0; i<this.length; i++){
    if(this[i] == obj){
      return true;
    }
  }
  return false;
}


function execFilter(string){
  var options = v2c.context.args;
  var ignoreCase = options.contains("ignoreCase");
  var ignoreZenHan = options.contains("ignoreZenHan");
  var ignoreKana = options.contains("ignoreKana");
  // 検索前処理用関数
  function key(string){
    string = new String(string);
    if(ignoreCase){
      string = toLowerCase(string);
    }
    if(ignoreZenHan){
      string = toZenkakuCase(string);
    }
    if(ignoreKana){
      string = toHiraganaCase(string);
    }
    return string;
  }

  // stringが含まれるレスを取得
  var result = search(string, key);

  // レスでフィルタ
  if(options.contains("filterRes")){
    v2c.context.setFilteredRes(result);
  }

  // 出力
  var out = 
    "【レス抽出】\n"
    + "対象スレ:" + v2c.context.thread.title + "\n"
    + "キーワード:" + string + "\n\n"
    + "抽出レス数:" + result.length;
  if(options.contains("toClipboard")){
    v2c.context.setClipboardText(out);
  }else{
    v2c.alert(out);
  }
}

var string = v2c.context.selText;
if (!string || (string.length()==0) ) {
  string = v2c.prompt("抽出キーワード",'');
}
if (string && (string.length()>0) ) {
  execFilter(string);
}



Create a new paste based on this one


Comments: