private static void WriteTableComponent(List <string> elements, StreamWriter writer)
        {
            writer.WriteLine(MarkdownConverter.GetTableHead(
                                 new HeadCell(componentNameTable, AlignmentCell.None),
                                 new HeadCell(contextTable, AlignmentCell.Left),
                                 new HeadCell(uniqueTable, AlignmentCell.Center),
                                 new HeadCell(eventTable, AlignmentCell.Center),
                                 new HeadCell(fieldsTable, AlignmentCell.Left),
                                 new HeadCell(descriptionTable, AlignmentCell.Left)));

            foreach (var element in elements)
            {
                var component = ParseComponentFile(element);

                string description = component.Description.Replace("\r\n", "<br/>");
                string contexts    = component.Contexts.Count > 1 ?
                                     MarkdownConverter.ConvertToUnnumaricalList(component.Contexts) :
                                     (component.Contexts.FirstOrDefault() ?? imgNegCheckMark);
                string unique   = component.Unique ? imgCheckMark : string.Empty;
                string ecsEvent = component.Event ? imgCheckMark : string.Empty;
                string fields   = component.Fields.Count > 1 ? MarkdownConverter.ConvertToUnnumaricalList(component.Fields) :
                                  (component.Fields.FirstOrDefault() ?? imgFlagMark);
                writer.WriteLine(MarkdownConverter.GetTableCustomRow(component.Name, contexts,
                                                                     unique, ecsEvent, fields, description));
            }

            writer.WriteLine(MarkdownConverter.GetHorizontalLine());
        }
        private static void WriteTableSystem(List <string> elements, StreamWriter writer)
        {
            List <SystemData> systems = new List <SystemData>();

            foreach (var element in elements)
            {
                systems.Add(ParseSystemFile(element));
            }

            // system
            if (systems.Where(x => !x.IsReactive).Count() > 0)
            {
                writer.WriteLine(MarkdownConverter.GetTableHead(
                                     new HeadCell(systemNameTable, AlignmentCell.None),
                                     new HeadCell(typeTable, AlignmentCell.Left),
                                     new HeadCell(descriptionTable, AlignmentCell.Left)));

                foreach (var system in systems.Where(x => !x.IsReactive))
                {
                    string description = system.Description.Replace("\r\n", "<br/>");
                    string types       = system.Types.Count > 1 ?
                                         MarkdownConverter.ConvertToUnnumaricalList(system.Types) :
                                         system.Types.First();

                    writer.WriteLine(MarkdownConverter.GetTableCustomRow(system.Name, types, description));
                }

                writer.WriteLine(MarkdownConverter.GetHorizontalLine());
            }

            // reactive
            if (systems.Where(x => x.IsReactive).Count() > 0)
            {
                writer.WriteLine(MarkdownConverter.GetTableHead(
                                     new HeadCell(reactiveSystemNameTable, AlignmentCell.None),
                                     new HeadCell(typeTable, AlignmentCell.Left),
                                     new HeadCell(EntityTable, AlignmentCell.Center),
                                     new HeadCell(triggerTable, AlignmentCell.Left),
                                     new HeadCell(descriptionTable, AlignmentCell.Left)));

                foreach (var system in systems.Where(x => x.IsReactive))
                {
                    string description = system.Description.Replace("\r\n", "<br/>");
                    string types       = system.Types.Count > 1 ?
                                         MarkdownConverter.ConvertToUnnumaricalList(system.Types) :
                                         (system.Types.FirstOrDefault() ?? imgNegCheckMark);
                    string triggerType = (!string.IsNullOrEmpty(system.Reactive.TriggerType) ?
                                          string.Format("{0}:<br/>", system.Reactive.TriggerType) : string.Empty);
                    string triggers = system.Reactive.Triggers.Count > 1 ?
                                      MarkdownConverter.ConvertToUnnumaricalList(system.Reactive.Triggers) :
                                      (system.Reactive.Triggers.FirstOrDefault() ?? imgNegCheckMark);

                    writer.WriteLine(MarkdownConverter.GetTableCustomRow(system.Name, types, system.Reactive.Entity,
                                                                         triggerType + triggers, description));
                }

                writer.WriteLine(MarkdownConverter.GetHorizontalLine());
            }
        }