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 ) ); } } }