/// <summary> /// Genera los grupos de espacios de nombres asociados a un programa /// </summary> internal NameSpaceGroupModelCollection Generate(ProgramModel program) { NameSpaceGroupModelCollection groups = GroupNameSpaces(program); // Añade las estructuras adicionales a los grupos AddStructsToGroups(groups, program); // Devuelve la colección de grupos return(groups); }
/// <summary> /// Procesa los elementos de documentación /// </summary> private void AddNameSpacesToGroup(NameSpaceGroupModelCollection groups, CompilationUnitModel compilationUnit) { foreach (NameSpaceModel nameSpace in compilationUnit.SearchNameSpaces()) { if (nameSpace != null) { groups.Add(nameSpace); } } }
/// <summary> /// Convierte un grupo de espacio de nombres en una serie de estructuras de documentación /// </summary> internal StructDocumentationModelCollection Convert(NameSpaceGroupModelCollection groups) { StructDocumentationModelCollection structsDoc = new StructDocumentationModelCollection(); // Convierte los grupos foreach (NameSpaceGroupModel group in groups) { structsDoc.Add(Convert(group)); } // Devuelve la colección de estructuras return(structsDoc); }
/// <summary> /// Convierte un grupo de espacio de nombres en una serie de estructuras de documentación /// </summary> internal StructDocumentationModelCollection Convert(NameSpaceGroupModelCollection objColGroups) { StructDocumentationModelCollection objColStructs = new StructDocumentationModelCollection(); // Convierte los grupos foreach (NameSpaceGroupModel objGroup in objColGroups) { objColStructs.Add(Convert(objGroup)); } // Devuelve la colección de estructuras return(objColStructs); }
/// <summary> /// Procesa los elementos de documentación /// </summary> private void AddNameSpacesToGroup(NameSpaceGroupModelCollection objColGroups, CompilationUnitModel objCompilationUnit) { List <NameSpaceModel> objColNameSpaces = objCompilationUnit.SearchNameSpaces(); // Añade los espacios de nombres al documento foreach (NameSpaceModel objNameSpace in objColNameSpaces) { if (objNameSpace != null) { objColGroups.Add(objNameSpace); } } }
/// <summary> /// Agrupa los espacios de nombres de un programa /// </summary> private NameSpaceGroupModelCollection GroupNameSpaces(ProgramModel objProgram) { NameSpaceGroupModelCollection objColGroups = new NameSpaceGroupModelCollection(); // Genera la documentación foreach (CompilationUnitModel objCompilationUnit in objProgram.CompilationUnits) { // Añade los espacios de nombres AddNameSpacesToGroup(objColGroups, objCompilationUnit); // Añade los elementos sin espacio de nombres AddStructsNoNameSpace(objColGroups, objCompilationUnit); } // Devuelve los grupos return(objColGroups); }
/// <summary> /// Añade las estructuras que no tienen un espacio de nombres /// </summary> private void AddStructsNoNameSpace(NameSpaceGroupModelCollection groups, CompilationUnitModel compilationUnit) { LanguageStructModelCollection structsDoc = compilationUnit.SearchNoNameSpaces(); if (structsDoc != null && structsDoc.Count > 0) { NameSpaceGroupModel group = GetGroupNoNameSpace(groups); // Añade las estructuras foreach (LanguageStructModel structDoc in structsDoc) { group.NameSpace.Items.Add(structDoc); } } }
/// <summary> /// Añade las estructuras que no tienen un espacio de nombres /// </summary> private void AddStructsNoNameSpace(NameSpaceGroupModelCollection objColGroups, CompilationUnitModel objCompilationUnit) { LanguageStructModelCollection objColStructs = objCompilationUnit.SearchNoNameSpaces(); if (objColStructs != null && objColStructs.Count > 0) { NameSpaceGroupModel objGroup = GetGroupNoNameSpace(objColGroups); // Añade las estructuras foreach (LanguageStructModel objStruct in objColStructs) { objGroup.NameSpace.Items.Add(objStruct); } } }
/// <summary> /// Obtiene el grupo de espacios de nombres para las clases sin espacio de nombres /// </summary> private NameSpaceGroupModel GetGroupNoNameSpace(NameSpaceGroupModelCollection objColGroups) { NameSpaceGroupModel objGroup = objColGroups.Search(cnstStrNoNameSpace); // Si no se ha encontrado el espacio de nombres se añade if (objGroup == null) { // Crea el espacio de nombres objGroup = new NameSpaceGroupModel(null, cnstStrNoNameSpace); // Añade el espacio de nombres a la colección objColGroups.Add(objGroup); // Crea el símbolo del espacio de nombres objGroup.NameSpace = new NameSpaceModel(null); objGroup.NameSpace.Name = cnstStrNoNameSpace; } // Devuelve el grupo return(objGroup); }
/// <summary> /// Obtiene el grupo de espacios de nombres para las clases sin espacio de nombres /// </summary> private NameSpaceGroupModel GetGroupNoNameSpace(NameSpaceGroupModelCollection groups) { NameSpaceGroupModel group = groups.Search(NoNameSpace); // Si no se ha encontrado el espacio de nombres se añade if (group == null) { // Crea el espacio de nombres group = new NameSpaceGroupModel(null, NoNameSpace); // Añade el espacio de nombres a la colección groups.Add(group); // Crea el símbolo del espacio de nombres group.NameSpace = new NameSpaceModel(null); group.NameSpace.Name = NoNameSpace; } // Devuelve el grupo return(group); }
/// <summary> /// Añade las estructuras a los grupos /// </summary> private void AddStructsToGroups(NameSpaceGroupModelCollection groups, ProgramModel program) { foreach (CompilationUnitModel compilationUnit in program.CompilationUnits) { foreach (LanguageStructModel structDoc in compilationUnit.Root.Items) { if (structDoc is NameSpaceModel) { NameSpaceModel nameSpace = structDoc as NameSpaceModel; NameSpaceGroupModel group = groups.Search(nameSpace.Name); if (group != null) { foreach (LanguageStructModel child in nameSpace.Items) { // Si no se ha añadido antes este espacio de nombres, se crea if (group.NameSpace == null) { group.NameSpace = nameSpace; } // Añade el elemento hijo AddStructToNameSpace(group.NameSpace, child); } } } else { NameSpaceGroupModel group = GetGroupNoNameSpace(groups); if (group != null) { AddStructToNameSpace(group.NameSpace, structDoc); } } } } }
/// <summary> /// Añade las estructuras a los grupos /// </summary> private void AddStructsToGroups(NameSpaceGroupModelCollection objColGroups, ProgramModel objProgram) { foreach (CompilationUnitModel objCompilationUnit in objProgram.CompilationUnits) { foreach (LanguageStructModel objStruct in objCompilationUnit.Root.Items) { if (objStruct is NameSpaceModel) { NameSpaceModel objNameSpace = objStruct as NameSpaceModel; NameSpaceGroupModel objGroup = objColGroups.Search(objNameSpace.Name); if (objGroup != null) { foreach (LanguageStructModel objChild in objNameSpace.Items) { // Si no se ha añadido antes este espacio de nombres, se crea if (objGroup.NameSpace == null) { objGroup.NameSpace = objNameSpace; } // Añade el elemento hijo AddStructToNameSpace(objGroup.NameSpace, objChild); } } } else { NameSpaceGroupModel objGroup = GetGroupNoNameSpace(objColGroups); if (objGroup != null) { AddStructToNameSpace(objGroup.NameSpace, objStruct); } } } } }