//レイアウト部分のタグフィルタ
function filtrateLayout(mainStr){
	var CR=getCRChars()
	var mainCode=new makeCode(mainStr,P_NO_USE)
	var lineCode
	var bufName=""
	var nameStr=""
	var slashSym=""
	var bufAttribute=""
	var bufStr=""

	var ltCnt=0      //無効な"<"の数をカウント
	var tagFlg=false //有効なタグ
	var gtFlg=false  //有効なタグ内で">"が出現した

	//一行ずつ取り出してフィルタリング
	mainCode.getChr()
	while(mainCode.Chr!=""){
		//タグフラグ初期化
		tagFlg=false

		//一行取り出す
		lineCode=new makeCode(mainCode.getFront(CR),P_NO_USE)

		//取り出した行をフィルタリング
		lineCode.getChr()
		while(lineCode.Chr!=""){

			//"<"のとき
			if(lineCode.Chr=="<"){
				if(tagFlg){
					bufAttribute+="&lt;"
				}else{
					//バッファクリア
					bufName=""
					bufAttribute=""

					//"<"の次の文字をチェック
					lineCode.getChr()
					if(lineCode.Chr=="/"){
						slashSym="/"
						lineCode.getChr()
					}else{
						slashSym=""
					}

					//エレメント名を取得
					//最初の一文字はa-z,A-Z で、二文字目以降は 制御文字(半角スペースも含む),"<",">"以外の文字
					if(lineCode.Chr>="a" && lineCode.Chr<="z" ||
					   lineCode.Chr>="A" && lineCode.Chr<="Z"){
						while(lineCode!="" && lineCode.Chr>" " && lineCode.Chr!="<" && lineCode.Chr!=">"){
							bufName+=lineCode.Chr
							lineCode.getChr()
						}
					}

					//タグ判別
					nameStr=bufName.toLowerCase()
					if(nameStr==""||
					   nameStr.indexOf("body")==0 ||
					   nameStr.indexOf("head")==0 ||
					   nameStr.indexOf("html")==0 ||
					   nameStr.indexOf("meta")==0 ||
					   nameStr.indexOf("title")==0 ){
					//使用不可なタグの場合
						ltCnt++
						bufStr+="&lt;"+slashSym+bufName
					}else{
					//使用可能なタグの場合
						tagFlg=true
						gtFlg=false
					}
					continue
				}
			//">"のとき
			}else if(lineCode.Chr==">"){
				if(tagFlg){
					//タグの"<"に対応する">"が出現したとき
					if(ltCnt>0){
						gtFlg=true
						ltCnt--
						bufAttribute+="&gt;"
					//ltCnt==0の場合
					}else{
						tagFlg=false
						bufStr+="<"+slashSym+nameStr+bufAttribute+">"
					}
				}else{
					if(ltCnt>0){
						ltCnt--
					}
					bufStr+="&gt;"
				}


			//"<",">",改行 以外のとき
			}else{
				if(tagFlg){
					bufAttribute+=lineCode.Chr
				}else{
					bufStr+=lineCode.Chr
				}
			}

			//次の文字を取り出す
			lineCode.getChr()

		}

		//行末処理
		if(tagFlg){
			if(gtFlg){
				bufStr+="<"+slashSym+nameStr+bufAttribute
			}else{
				ltCnt++
				bufStr+="&lt;"+slashSym+bufName+bufAttribute
			}
		}

		//改行の場合
		if(mainCode.Chr!="") bufStr+=CR
		mainCode.getChr()
	}
	return bufStr
}