--- /dev/null
+import wrapString from './wrapString';
+import wrapWord from './wrapWord';
+
+/**
+ * Wrap a single cell value into a list of lines
+ *
+ * Always wraps on newlines, for the remainder uses either word or string wrapping
+ * depending on user configuration.
+ *
+ * @param {string} cellValue
+ * @param {number} columnWidth
+ * @param {boolean} useWrapWord
+ * @returns {Array}
+ */
+export default (cellValue, columnWidth, useWrapWord) => {
+ // First split on literal newlines
+ const cellLines = cellValue.split('\n');
+
+ // Then iterate over the list and word-wrap every remaining line if necessary.
+ for (let lineNr = 0; lineNr < cellLines.length;) {
+ let lineChunks;
+
+ if (useWrapWord) {
+ lineChunks = wrapWord(cellLines[lineNr], columnWidth);
+ } else {
+ lineChunks = wrapString(cellLines[lineNr], columnWidth);
+ }
+
+ // Replace our original array element with whatever the wrapping returned
+ cellLines.splice(lineNr, 1, ...lineChunks);
+ lineNr += lineChunks.length;
+ }
+
+ return cellLines;
+};