private IEnumerable<string> EncodeRowGroups(List<HtmlTableRowGroup> rowGroups, string baseHeader, string diffHeader, string leftIdPrefix, string rightIdPrefix, string edgePrefix)
        {
            var left = new HtmlTable(leftIdPrefix, leftIdPrefix, "LeftTable");
            var right = new HtmlTable(rightIdPrefix, rightIdPrefix, "RightTable");
            var edge = new HtmlTable(edgePrefix, edgePrefix, "EdgeTable");
            left.AddDiffHeader();
            right.AddDiffHeader();

            foreach (var rowGroup in rowGroups)
            {
                left.AddBody(rowGroup.Class + " Base");
                right.AddBody(rowGroup.Class + " Diff");
                edge.AddBody(rowGroup.Class + " Diff");

                foreach (var line in rowGroup.Lines)
                {
                    var id = line.Left.Id + "-" + line.Right.Id;
                    left.AddCodeLine(line.Left.LineNumber, id, line.Left.Code);
                    right.AddCodeLine(line.Right.LineNumber, id, line.Right.Code);
                    edge.AddEdgeLine(line.Right.LineNumber, id);
                }

                left.EndBody();
                right.EndBody();
                edge.EndBody();

                // Add Seperator line after every unchanged
                if (rowGroup.DiffType == DiffType.Unchanged)
                    AddSeperators(rowGroup, left, right, edge);
            }

            left.End();
            right.End();
            edge.End();
            var testMode = false;
            var containerTable = new HtmlTable("", "DiffView", "DiffTable", testMode);
            containerTable.AddContainerHeader("ContainerTable", baseHeader, diffHeader);
            containerTable.AddTables(left, right, edge);
            containerTable.End(testMode);

            return containerTable.Html;
        }