/*
フィルタのセレクタfldの値は
FLD_COMMENTS=0
FLD_REPLY=1
*/
//コメント、返信のタグフィルタ
function filtrateField(mainStr,fld){
var CR=getCRChars()
var mainCode=new makeCode(mainStr,P_NO_USE)
var bufStr=""
var TAGs_atr=new Array()
var TAGs_no_atr=new Array()
var i=0
//属性可なエレメント名
TAGs_atr[i++]="a"
TAGs_atr[i++]="div"
TAGs_atr[i++]="font"
TAGs_atr[i++]="img"
if(fld==FLD_REPLY){
TAGs_atr[i++]="area"
TAGs_atr[i++]="bgsound"
TAGs_atr[i++]="caption"
TAGs_atr[i++]="dir"
TAGs_atr[i++]="dl"
TAGs_atr[i++]="hr"
TAGs_atr[i++]="li"
TAGs_atr[i++]="map"
TAGs_atr[i++]="marquee"
TAGs_atr[i++]="menu"
TAGs_atr[i++]="ol"
TAGs_atr[i++]="p"
TAGs_atr[i++]="pre"
TAGs_atr[i++]="span"
TAGs_atr[i++]="table"
TAGs_atr[i++]="td"
TAGs_atr[i++]="th"
TAGs_atr[i++]="tr"
TAGs_atr[i++]="ul"
}
//属性不可なエレメント名
i=0
TAGs_no_atr[i++]="b"
TAGs_no_atr[i++]="code"
TAGs_no_atr[i++]="dfn"
TAGs_no_atr[i++]="em"
TAGs_no_atr[i++]="i"
TAGs_no_atr[i++]="kbd"
TAGs_no_atr[i++]="sub"
TAGs_no_atr[i++]="sup"
TAGs_no_atr[i++]="tt"
TAGs_no_atr[i++]="u"
TAGs_no_atr[i++]="var"
if(fld==FLD_REPLY){
TAGs_no_atr[i++]="address"
TAGs_no_atr[i++]="big"
TAGs_no_atr[i++]="blink"
TAGs_no_atr[i++]="blockquote"
TAGs_no_atr[i++]="br"
TAGs_no_atr[i++]="center"
TAGs_no_atr[i++]="cite"
TAGs_no_atr[i++]="dd"
TAGs_no_atr[i++]="dt"
for(var k=1;k<7;k++) TAGs_no_atr[i++]="h"+k
TAGs_no_atr[i++]="listing"
TAGs_no_atr[i++]="nobr"
TAGs_no_atr[i++]="plaintext"
TAGs_no_atr[i++]="s"
TAGs_no_atr[i++]="samp"
TAGs_no_atr[i++]="small"
TAGs_no_atr[i++]="strike"
TAGs_no_atr[i++]="strong"
TAGs_no_atr[i++]="wbr"
}
//一行ずつ取り出してフィルタリング
mainCode.getChr()
while(mainCode.Chr!=""){
bufStr+=filtrateField_line(mainCode.getFront(CR),TAGs_atr,TAGs_no_atr)
if(mainCode.Chr!="") bufStr+=TAG_BR+CR
mainCode.getChr()
}
return bufStr
}
//タグフィルタ本体(コメント、返信用)
function filtrateField_line(mainStr,TAGs_atr,TAGs_no_atr){
var bufStr=""
var lineCode=new makeCode(mainStr,P_NO_USE)
var bufName=""
var nameStr=""
var slashSym=""
var tmpStr=""
var continueFlg=false
lineCode.getChr()
while(lineCode.Chr!=""){
continueFlg=false
//"<"より前を取り出す
bufStr+=replaceString_all(lineCode.getFront("<"),">",">")
if(lineCode.Chr=="") break
//"<"の次の文字をチェック
bufName=""
lineCode.getChr()
if(lineCode.Chr=="/"){
slashSym="/"
lineCode.getChr()
}else{
slashSym=""
}
//エレメント名を取得
while(lineCode.Chr>="a" && lineCode.Chr<="z" ||
lineCode.Chr>="A" && lineCode.Chr<="Z"){
bufName+=lineCode.Chr
lineCode.getChr()
}
//タグ判別開始
nameStr=bufName.toLowerCase()
//使用可能なタグ(属性不可)の場合
if(lineCode.Chr==">"){
for(var i=0;i<TAGs_no_atr.length;i++){
if(nameStr==TAGs_no_atr[i]){
bufStr+="<"+slashSym+bufName+">"
lineCode.getChr()
continueFlg=true
break
}
}
if(continueFlg) continue
}
//使用可能なタグ(属性可)の場合
if(lineCode.Chr==">" || lineCode.Chr==" " || lineCode.Chr==""){
for(var i=0;i<TAGs_atr.length;i++){
if(nameStr==TAGs_atr[i]){
//エレメント名の後ろから">"より前を取り出す
tmpStr=replaceString_all(lineCode.getFront(">"),"<","<")
bufStr+="<"+slashSym+bufName+tmpStr
//">"が見つかった場合
if(lineCode.Chr==">") bufStr+=">"
lineCode.getChr()
continueFlg=true
break
}
}
if(continueFlg) continue
}
//使用不可なタグの場合
bufStr+="<"+slashSym+bufName
}
return bufStr
}