--- /dev/null
+import {
+ drawBorderTop,
+ drawBorderJoin,
+ drawBorderBottom
+} from './drawBorder';
+import drawRow from './drawRow';
+
+/**
+ * @param {Array} rows
+ * @param {Object} border
+ * @param {Array} columnSizeIndex
+ * @param {Array} rowSpanIndex
+ * @param {Function} drawHorizontalLine
+ * @param {boolean} singleLine
+ * @returns {string}
+ */
+export default (rows, border, columnSizeIndex, rowSpanIndex, drawHorizontalLine, singleLine) => {
+ let output;
+ let realRowIndex;
+ let rowHeight;
+
+ const rowCount = rows.length;
+
+ realRowIndex = 0;
+
+ output = '';
+
+ if (drawHorizontalLine(realRowIndex, rowCount)) {
+ output += drawBorderTop(columnSizeIndex, border);
+ }
+
+ rows.forEach((row, index0) => {
+ output += drawRow(row, border);
+
+ if (!rowHeight) {
+ rowHeight = rowSpanIndex[realRowIndex];
+
+ realRowIndex++;
+ }
+
+ rowHeight--;
+
+ if (!singleLine && rowHeight === 0 && index0 !== rowCount - 1 && drawHorizontalLine(realRowIndex, rowCount)) {
+ output += drawBorderJoin(columnSizeIndex, border);
+ }
+ });
+
+ if (drawHorizontalLine(realRowIndex, rowCount)) {
+ output += drawBorderBottom(columnSizeIndex, border);
+ }
+
+ return output;
+};