/// <summary>
 /// Just track the new interface; check later.  Allows dups, but no biggie.
 /// </summary>
 /// <param name="iface"></param>
 public void ImplementInterface(StringTemplateGroupInterface iface)
 {
     if (interfaces == null)
     {
         interfaces = new ArrayList();
     }
     interfaces.Add(iface);
 }
        /// <summary>
        /// Create an interface from the input stream
        /// </summary>
        public StringTemplateGroupInterface(
			TextReader r, 
			IStringTemplateErrorListener errorListener,
			StringTemplateGroupInterface superInterface)
        {
            ErrorListener = errorListener;
            SuperInterface = superInterface;
            ParseInterface(r);
        }
 /// <summary>
 /// Creates a StringTemplateGroupInterface instance that manages a set of
 /// template interface definitions defined in a "group interface file".
 /// </summary>
 /// <param name="reader">Input stream for group-interface file data</param>
 /// <param name="errorListener">Error message sink</param>
 /// <param name="superGroup">Parent (or super/base) group interface</param>
 /// <returns>A StringTemplateGroupInterface instance or null</returns>
 public StringTemplateGroupInterface CreateInterface(
     TextReader reader,
     IStringTemplateErrorListener errorListener,
     StringTemplateGroupInterface superInterface)
 {
     return new StringTemplateGroupInterface(reader, errorListener, superInterface);
 }