diff --git a/packages/plugin-print/src/measure-text.js b/packages/plugin-print/src/measure-text.js index 510b57f20..c112db53b 100644 --- a/packages/plugin-print/src/measure-text.js +++ b/packages/plugin-print/src/measure-text.js @@ -16,29 +16,29 @@ export function measureText(font, text) { } export function splitLines(font, text, maxWidth) { - const words = text.split(" "); + const words = text.replace(/[\r\n]+/g, " \n").split(" "); + const lines = []; let currentLine = []; let longestLine = 0; - words.forEach((word) => { const line = [...currentLine, word].join(" "); const length = measureText(font, line); - if (length <= maxWidth) { + const withinMaxWidth = length <= maxWidth; + const containsNewline = word.includes("\n"); + + if (withinMaxWidth && !containsNewline) { if (length > longestLine) { longestLine = length; } - currentLine.push(word); } else { lines.push(currentLine); - currentLine = [word]; + currentLine = [word.replace("\n", "")]; } }); - lines.push(currentLine); - return { lines, longestLine, diff --git a/packages/plugin-print/test/images/with-newlines.png b/packages/plugin-print/test/images/with-newlines.png new file mode 100644 index 000000000..8da2d115a Binary files /dev/null and b/packages/plugin-print/test/images/with-newlines.png differ diff --git a/packages/plugin-print/test/print.test.js b/packages/plugin-print/test/print.test.js index ed05e30ef..71766af0e 100644 --- a/packages/plugin-print/test/print.test.js +++ b/packages/plugin-print/test/print.test.js @@ -294,4 +294,17 @@ describe("Write text over image", function () { expect(height).toEqual(lineHeight); }); + + it("text with newlines, default alignment", async () => { + const expectedImage = await Jimp.read( + getTestDir(__dirname) + "/images/with-newlines.png" + ); + + const textImage = await createTextImage(100, 240, Jimp.FONT_SANS_16_BLACK, { + text: "This \nis only \na \ntest.", + maxWidth: 300, + }); + + expect(textImage.bitmap.data).toEqual(expectedImage.bitmap.data); + }); });