key0-96/
key0-96/doc/key/
key0-96/doc/key/credits/
key0-96/doc/key/developers/
key0-96/doc/key/developers/resources/
key0-96/setup/caves/
key0-96/setup/help/
key0-96/setup/ruins/
key0-96/src/
key0-96/src/commands/
key0-96/src/events/
key0-96/src/hack/
key0-96/src/sql/
key0-96/src/swing/
key0-96/src/talker/forest/
key0-96/src/talker/objects/
key0-96/src/terminals/
package key;

import key.util.LinkedList;

import java.io.*;
import java.util.Enumeration;

/**
  *  'MultiParagraph' is basically a paragraph which consists of others, ordered
  *  sequentially.  So you might have a line, then some text, then a trailing line,
  *  and wish to treat it all as a single paragraph.
 */
public final class MultiParagraph extends Paragraph
{
	private LinkedList subParagraphs;
	
	protected MultiParagraph( LinkedList ll )
	{
		subParagraphs = ll;
	}
	
	private MultiParagraph()
	{
		subParagraphs = new LinkedList();
	}
	
	public Enumeration getParagraphs()
	{
		return( subParagraphs.elements() );
	}
	
	public Paragraph substitute( String[] codes )
	{
		MultiParagraph mp = new MultiParagraph();
		
		for( Enumeration e = subParagraphs.elements(); e.hasMoreElements(); )
			mp.subParagraphs.append( ((Paragraph)e.nextElement()).substitute( codes ) );
		
		return( mp );
	}
	
	public String toString()
	{
		return( "Multi-paragraph, " + subParagraphs.count() + " sub-paragraphs" );
	}
	
	/**
	  *  You use this class to build a MultiParagraph step by step,
	  *  as a MultiParagraph is immutable and may not be modified
	 */
	public static class Generator
	{
		private LinkedList subParagraphs;
		
		public Generator()
		{
			subParagraphs = new LinkedList();
		}
		
		public void append( Paragraph p )
		{
			if( p != null )
				subParagraphs.append( p );
		}
		
		public MultiParagraph getParagraph()
		{
			return( new MultiParagraph( subParagraphs ) );
		}
	}
}