View Javadoc

    1   /*
    2    * "Peko" Visual Novel System
    3    *
    4    * All Rights Reserved.
    5    * Copyright (c) 1999-2003 Tsukuba Bunko.
    6    *
    7    * $Id: ParagraphHandler.java,v 1.2 2005/07/11 14:18:23 ppoi Exp $
    8    */
    9   package tsukuba_bunko.peko.scenario.text;
    10
    11  import	org.xml.sax.Attributes;
    12
    13  import	tsukuba_bunko.peko.Logger;
    14
    15  import	tsukuba_bunko.peko.scenario.FlagScope;
    16  import	tsukuba_bunko.peko.scenario.PSMLUtil;
    17
    18  import	tsukuba_bunko.peko.scenario.util.WaitHandler;
    19
    20
    21  /***
    22   * <samp>p</samp> 要素の処理を行う <code>ElementHandler</code> です。
    23   * @author	$Author: ppoi $
    24   * @version	$Revision: 1.2 $
    25   */
    26  public class ParagraphHandler	extends TextElementHandler	{
    27
    28  	/***
    29  	 * テキストバッファ
    30  	 */
    31  	private StringBuffer	_text = null;
    32
    33  	/***
    34  	 * この要素の評価終了後に設定されるフラグ
    35  	 */
    36  	private String	_flagID = null;
    37
    38  	/***
    39  	 * WaitHandler
    40  	 */
    41  	private WaitHandler	_waitHandler = new WaitHandler();
    42
    43
    44  	/***
    45  	 * <code>ParagraphHandler</code> のインスタンスを作成します。
    46  	 */
    47  	public ParagraphHandler()
    48  	{
    49  		super();
    50  	}
    51
    52
    53  	/***
    54  	 * パラグラフを表示します。
    55  	 * @return	文章を表示した場合
    56  	 */
    57  	private boolean performParagraph()
    58  	{
    59  		TextCoordinator	coordinator = getTextCoordinator();
    60  		String	paragraph = new String( _text );
    61  		if( paragraph.length() > 0 )	{
    62  			coordinator.pushText( new String(_text) );
    63  			_text = new StringBuffer( 48 );
    64  			return true;
    65  		}
    66  		else	{
    67  			return false;
    68  		}
    69  	}
    70
    71
    72  //
    73  //	ContentHandler の実装
    74  //
    75  	public void startDocument()
    76  	{
    77  		Logger.debug( "[scene] start paragraph" );
    78  		_text = new StringBuffer( 48 );
    79  		_flagID = null;
    80  		getTextCoordinator().begin();
    81  	}
    82
    83  	public void endDocument()
    84  	{
    85  		Logger.debug( "[scene] end paragraph" );
    86  		if( performParagraph() )	{
    87  			stop();
    88  		}
    89  		_text = null;
    90  		getTextCoordinator().commit();
    91
    92  		if( _flagID != null )	{
    93  			getSceneContext().declareFlag( _flagID, FlagScope.SESSION );
    94  		}
    95  	}
    96
    97  	public void startElement( String namespaceURI, String localName, String qName, Attributes attrs )
    98  		throws org.xml.sax.SAXException
    99  	{
    100 		if( localName.equals("wait") )	{
    101 			performParagraph();
    102 			_waitHandler.waitFor( attrs );
    103 		}
    104 		else if( localName.equals("p") )	{
    105 			_flagID = PSMLUtil.getAttributeValue( attrs, "flag" );
    106 		}
    107 	}
    108
    109 	public void endElement( String namespaceURI, String localName, String qName )
    110 	{
    111 		//	スタイルを実装するまでは空のままです。
    112 	}
    113
    114 	public void characters( char[] ch, int begin, int length )
    115 	{
    116 		_text.append( ch, begin, length );
    117 	}
    118 }