void IApiDocTemplateProcessor.Process(ClassifierListTemplate template)
 {
     List<DoxClassifier> classifiers;
     if (this.currentNamespace != null)
     {
         classifiers = this.currentNamespace.Classifiers.ToList();
     }
     else
     {
         classifiers =
             (from c in this.model.Compounds
             where c is DoxClassifier
             select (DoxClassifier)c).ToList();
     }
     int i = 0;
     while (i < classifiers.Count)
     {
         foreach (var ic in classifiers[i].InnerClassifiers)
         {
             if (!classifiers.Contains(ic)) classifiers.Add(ic);
         }
         ++i;
     }
     classifiers.RemoveAll(c => !SelectClassifier(c, template));
     classifiers = classifiers.OrderBy(c => c.Name).ToList();
     foreach (var c in classifiers)
     {
         this.currentClassifier = c;
         string name = generator.NormalizeName(c.Name);
         if (currentNamespace != null)
         {
             name = generator.NormalizeName(c.Name);
         }
         generator.PrintSection(c.Kind + ": " + name, c.Identifier);
         this.generator.NextSectionLevel();
         template.ProcessItems(this);
         this.generator.PreviousSectionLevel();
         this.currentClassifier = null;
     }
 }
 private static bool SelectClassifier(DoxClassifier c, ClassifierListTemplate template)
 {
     if (template is InterfaceListTemplate)
     {
         return c.Kind == CompoundKind.Interface;
     }
     else if (template is ClassListTemplate)
     {
         return c.Kind == CompoundKind.Class;
     }
     else if (template is StructListTemplate)
     {
         return c.Kind == CompoundKind.Struct;
     }
     else if (template is EnumListTemplate)
     {
         return c.Kind == CompoundKind.Enum;
     }
     else
     {
         return c.Kind == CompoundKind.Interface ||
                 c.Kind == CompoundKind.Class ||
                 c.Kind == CompoundKind.Struct ||
                 c.Kind == CompoundKind.Enum;
     }
 }