/*
 * "Peko" Visual Novel System
 *
 * All Rights Reserved.
 * Copyright (c) 1999-2003 Tsukuba Bunko.
 *
 * $Id: ParagraphHandler.java,v 1.1.2.1 2003/12/11 10:17:57 ppoi Exp $
 */
package tsukuba_bunko.peko.scenario.text;

import	org.xml.sax.Attributes;

import	tsukuba_bunko.peko.Logger;

import	tsukuba_bunko.peko.scenario.FlagScope;
import	tsukuba_bunko.peko.scenario.PSMLUtil;


/**
 * <samp>p</samp> 要素の処理を行う <code>ElementHandler</code> です。
 * @author	$Author: ppoi $
 * @version	$Revision: 1.1.2.1 $
 */
public class ParagraphHandler	extends TextElementHandler	{

	/**
	 * テキストバッファ
	 */
	private StringBuffer	_text = null;

	/**
	 * この要素の評価終了後に設定されるフラグ
	 */
	private String	_flagID = null;


	/**
	 * <code>ParagraphHandler</code> のインスタンスを作成します。
	 */
	public ParagraphHandler()
	{
		super();
	}


	/**
	 * パラグラフを表示します。
	 */
	public void performParagraph()
	{
		TextCoordinator	coordinator = getTextCoordinator();
		coordinator.pushText( new String(_text) );
		_text = new StringBuffer( 48 );
	}


//
//	ContentHandler の実装
//
	public void startDocument()
	{
		Logger.debug( "[scene] start paragraph" );
		_text = new StringBuffer( 48 );
		_flagID = null;
		getTextCoordinator().begin();
	}

	public void endDocument()
	{
		Logger.debug( "[scene] end paragraph" );
		performParagraph();
		_text = null;
		stop();
		getTextCoordinator().commit();

		if( _flagID != null )	{
			getSceneContext().declareFlag( _flagID, FlagScope.SESSION );
		}
	}

	public void startElement( String namespaceURI, String localName, String qName, Attributes attrs )
	{
		if( localName.equals("wait") )	{
			performParagraph();
			//PENDING
			stop();	//	テスト用です！
		}
		else if( localName.equals("p") )	{
			_flagID = PSMLUtil.getAttributeValue( attrs, "flag" );
		}
	}

	public void endElement( String namespaceURI, String localName, String qName )
	{
		//	スタイルを実装するまでは空のままです。
	}

	public void characters( char[] ch, int begin, int length )
	{
		_text.append( ch, begin, length );
	}
}
