View Javadoc

    1   /*
    2    * "Peko" Visual Novel System
    3    *
    4    * All Rights Reserved.
    5    * Copyright (c) 1999-2003 Tsukuba Bunko.
    6    *
    7    * $Id: FontDeserializer.java,v 1.1 2005/07/11 12:49:18 ppoi Exp $
    8    */
    9   package tsukuba_bunko.peko.resource;
    10
    11  import	java.awt.font.TextAttribute;
    12
    13  import	java.util.Map;
    14
    15  import	org.xml.sax.Attributes;
    16  import	org.xml.sax.SAXException;
    17
    18  import	tsukuba_bunko.peko.Logger;
    19
    20  import	tsukuba_bunko.peko.resource.FontManager;
    21
    22  import	tsukuba_bunko.resource.BasicDeserializer;
    23
    24
    25  /***
    26   * {@link java.awt.Font} 型のリソースに対する {@link tsukuba_bunko.resource.ResourceDeserializer} 実装です。
    27   * @author	$Author: ppoi $
    28   * @version	$Revision: 1.1 $
    29   * @see <a href="http://softlab.tsukuba-bunko.org/peko/userguide/resource.html#type-peko:font">peko:font 型のリソース</a>
    30   */
    31  public class FontDeserializer	extends BasicDeserializer	{
    32
    33  	/***
    34  	 * フォント属性マップ
    35  	 */
    36  	protected Map	_fontAttributes = null;
    37
    38  	/***
    39  	 */
    40  	protected StringBuffer	_text = null;
    41
    42  	/***
    43  	 * <code>FontDeserializer</code> のインスタンスを生成します。
    44  	 */
    45  	public FontDeserializer()
    46  	{
    47  		super();
    48  	}
    49
    50
    51  //
    52  //	ContentHandler の実装
    53  //
    54  	public void startDocument()
    55  	{
    56  		_fontAttributes = new java.util.HashMap();
    57  		_fontAttributes.put( TextAttribute.FAMILY, "Serif" );
    58  		_fontAttributes.put( TextAttribute.SIZE, new Float(20f) );
    59  		_fontAttributes.put( TextAttribute.POSTURE, TextAttribute.POSTURE_REGULAR );
    60  		_fontAttributes.put( TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR );
    61  	}
    62
    63  	public void endDocument()
    64  	{
    65  		FontManager	fonts = FontManager.getInstance();
    66  		setValue( fonts.getFont(_fontAttributes) );
    67  	}
    68
    69  	public void startElement( String namespaceURI, String localName, String qName, Attributes attrs )
    70  	{
    71  		_text = new StringBuffer();
    72  	}
    73
    74  	public void endElement( String namespaceURI, String localName, String qName )
    75  		throws SAXException
    76  	{
    77  		if( qName.equals("family") )	{
    78  			_fontAttributes.put( TextAttribute.FAMILY, new String(_text) );
    79  		}
    80  		else if( qName.equals("size") )	{
    81  			try	{
    82  				_fontAttributes.put( TextAttribute.SIZE, Float.valueOf(new String(_text)) );
    83  			}
    84  			catch( Exception e )	{
    85  				Logger.warn( "[resource.font] invalid font size is specified :" + _text, e );
    86  			}
    87  		}
    88  		else if( qName.equals("style") )	{
    89  			String	style = new String( _text );
    90  			if( "italic".equals(style) )	{
    91  				_fontAttributes.put( TextAttribute.POSTURE, TextAttribute.POSTURE_OBLIQUE );
    92  			}
    93  		}
    94  		else if( qName.equals("weight") )	{
    95  			String	weight = new String( _text );
    96  			if( "bold".equals(weight) )	{
    97  				_fontAttributes.put( TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD );
    98  			}
    99  		}
    100 		_text = null;
    101 	}
    102
    103 	public void characters( char[] ch, int begin, int length )
    104 	{
    105 		if( _text != null )	{
    106 			_text.append( ch, begin, length );
    107 		}
    108 	}
    109 }