1	package antlr.preprocessor;
2	
3	/** Stores header action, grammar preamble, file options, and
4	 *  list of grammars in the file
5	 */
6	
7	import antlr.collections.impl.IndexedVector;
8	import java.util.Enumeration;
9	import java.io.*;
10	
11	public class GrammarFile {
12		protected String fileName;
13		protected String headerAction;
14		protected IndexedVector options;
15		protected IndexedVector grammars;
16		protected boolean expanded = false;	// any grammars expanded within?
17	
18		public GrammarFile(String f) {
19			fileName = f;
20			grammars = new IndexedVector();
21		}
22		public void addGrammar(Grammar g) {
23			grammars.appendElement(g.getName(), g);
24		}
25		public void generateExpandedFile() throws IOException {
26			if ( !expanded ) {
27				return;	// don't generate if nothing got expanded
28			}	
29			String expandedFileName = nameForExpandedGrammarFile(this.getName());
30			
31			// create the new grammar file with expanded grammars
32			PrintWriter expF = antlr.Tool.openOutputFile(expandedFileName);
33			expF.println(toString());
34			expF.close();
35		}
36		public IndexedVector getGrammars() {
37			return grammars;
38		}
39		public String getName() {return fileName;}
40		public String nameForExpandedGrammarFile(String f) {
41			if ( expanded ) {
42				// strip path to original input, make expanded file in current dir
43				return "expanded"+antlr.Tool.fileMinusPath(f);	
44			}
45			else {
46				return f;
47			}		
48		}
49		public void setExpanded(boolean exp) {
50			expanded = exp;
51		}
52		public void setHeaderAction(String a) {headerAction=a;}
53		public void setOptions(IndexedVector o) {options=o;}
54		public String toString() {
55			String h = headerAction==null ? "" : headerAction;
56			String o = options==null ? "" : Hierarchy.optionsToString(options);
57			
58			String s=h+o;
59			for (Enumeration e=grammars.elements(); e.hasMoreElements(); ) {
60				Grammar g = (Grammar)e.nextElement();
61				s += g;
62			}	
63			return s;
64		}
65	}
66