[ create a new paste ] login | about

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

Plain Text, pasted on Mar 22:
//【登録場所】 レス表示、選択テキスト
//【ラベル】 レス抽出ダイアログ
//【コマンド1】 $SCRIPT filter.js 
//【コマンド2】 $SCRIPT filter.js ignoreCase (大文字・小文字を無視)
//【コマンド3】 $SCRIPT filter.js ignoreKana (平仮名・片仮名を無視)
//【コマンド3】 $SCRIPT filter.js ignoreZenHan (全角・半角を無視)

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 doNothing(string){return string};

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(new String(res.message));
    var string = key(string);
    if(message.indexOf(string) != -1){
      result.push(res);
    }
  }
  return result;
}

function execFilter(string){
  option = v2c.context.args[0];
  if(option == "ignoreCase"){
    key = toLowerCase;
  }else if(option == "ignoreKana"){
    key = toHiraganaCase;
  }else if(option == "ignoreZenHan"){
    key = toZenkakuCase;
  }else{
    key = doNothing;
  }
  string = new String(string);
  var result = search(string, key);
  v2c.context.setFilteredRes(result);
  var out = 
    "【レス抽出】\n"
    + "対象スレ:" + v2c.context.thread.title + "\n"
    + "キーワード:" + string + "\n\n"
    + "抽出レス数:" + result.length;
  var useClipboard = v2c.confirm(out + "\n---------------------\nクリップボードに送る?");
  if(useClipboard){
    v2c.context.setClipboardText(out);
  }
}


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



Create a new paste based on this one


Comments: