/* フィルタのセレクタ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 }