package org.itscool.stylist.io;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.itscool.stylist.tag.HtmlTag;

/**
 * XHTMLに含まれるブロックタグ情報を応答データに変換します
 * @author kano
 * @version 1.00A 2006/08/09 新規作成
 */
public class HtmlBlockTagConverter extends HtmlConverter {
//    /**
//     * インスタンスの初期化を行います
//     * @param context ServletContextインスタンス
//     * @param req HttpServletRequestインスタンス
//     */
//    public HtmlBlockTagConverter(ServletContext context, HttpServletRequest req) {
//        super(context, req);
//    }
    
    /**
     * 応答用のXHTMLデータの作成を開始します
     * @param node HtmlTagインスタンス
     * @return 応答データ
     */
    public String convert( HtmlTag node, String tab) {
//        HtmlAttributeConverter attrCnv = new HtmlAttributeConverter(context, req);
        HtmlAttributeConverter attrCnv = new HtmlAttributeConverter();
        attrCnv.init(context, req);
        String tagName = node.getTagName();
        StringBuffer sb = new StringBuffer();
        if( !node.getTagName().equals(HtmlTag.TAG_HTML)
        && !node.getTagName().equals(HtmlTag.TAG_HEAD)
//		&& !node.getTagName().equals(HtmlTag.TAG_TITLE)
        && !node.getTagName().equals(HtmlTag.TAG_SCRIPT)
        && !node.getTagName().equals(HtmlTag.TAG_STYLE)
        && !node.getTagName().equals(HtmlTag.TAG_BODY)
        ){
            sb.append(tab);
        }
        
        sb.append("<").append(tagName);
        sb.append(attrCnv.convert(node));
        sb.append(">");
        if( !node.getTagName().equals(HtmlTag.TAG_TEXTAREA) ){
            sb.append(LINE);
        }
        int size = node.size();
        StringBuffer childSb = new StringBuffer();
        for(int i=0; i<size; i++ ){
            HtmlTag child = (HtmlTag)node.get(i);
            //textareaタグの場合タブを削除
            if( node.getTagName().equals(HtmlTag.TAG_TEXTAREA) ){
                childSb.append(super.convert(child, ""));
                //スクリプトタグの次の行が"//"のみの場合はサプレスする
            }else if( node.getTagName().equals(HtmlTag.TAG_SCRIPT)
            && child.getTagName().trim().equals("//")){
                continue;
            }else{
                childSb.append(super.convert(child, tab + "  "));
            }
        }
        if(node.getTagName().equals(HtmlTag.TAG_TEXTAREA)){
            sb.append(childSb.toString().trim());
        }else{
            sb.append(childSb.toString());
            
            if( !node.getTagName().equals(HtmlTag.TAG_HTML)
            && !node.getTagName().equals(HtmlTag.TAG_HEAD)
            && !node.getTagName().equals(HtmlTag.TAG_SCRIPT)
            && !node.getTagName().equals(HtmlTag.TAG_STYLE)
            && !node.getTagName().equals(HtmlTag.TAG_BODY)
            ){
                sb.append(tab);
            }
        }
        sb.append("</").append(tagName).append(">");
        return sb.toString();
    }
}
