Skip to content

alepinio/fast-word-wrap

Repository files navigation

fast-word-wrap

a fast and simple node.js package for getting a paragraph wrapped at a fixed line length

fast-word-wrap has been proven (see benchmark) to be faster than wordwrap (31x), wrap-text (11x) and word-wrap (10x)

toc

installation

$ npm install fast-word-wrap

usage

const wrap = require("fast-word-wrap");

const str = "The quick brown fox jumps over the lazy dog."; // the newline-free string to wrap
const cpl = 10; // the maximum number of characters per line

result = wrap(str, cpl);

console.log(result); // "The quick\nbrown fox\njumps over\nthe lazy\ndog.\n"

outputs

The quick
brown fox
jumps over
the lazy
dog.

wrapping strings containing newlines

fast-word-wrap won't work correctly if the input string contains newlines; if that's the case, simply do

partials = [];
for (p of str.split("\n").filter(s => s)) {
    partials.push(wrap(p, cpl));
}

result = partials.join("");

testing

unit

$ npm test test/unit.js

outputs

> [email protected] test
> ava --verbose "test/unit.js"


  ✔ no wrap
    ℹ The quick brown fox jumps over the lazy dog.
      
  ✔ wrap
    ℹ The quick
      brown fox
      jumps over
      the lazy
      dog.

  ✔ do your best
    ℹ The
      quick
      brown
      fox
      jumps
      over
      the
      lazy
      dog.
      
  ✔ wrap a fragment of "El inmortal" by Jorge Luis Borges
    ℹ [output omitted for brevity in readme]
      


  4 tests passed

benchmark

$ npm test test/benchmark.js

outputs in my laptop

> [email protected] test
> ava --verbose test/benchmark.js


  ✔ wrap faster than others (2.5s)
    ℹ 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
    ℹ wrapping 10000 times with each package a fragment of "El inmortal" by Jorge Luis Borges...
    ℹ wordwrap took 1500.74 ms
    ℹ wrap-text took 532.84 ms
    ℹ word-wrap took 506.52 ms
    ℹ fast-word-wrap took 47.02 ms


  1 test passed

barh

about the sample text and the golden master

the fragment used for testing is a transcription I did from my copy of "Nueva antología personal" by Jorge Luis Borges (ed. Emecé, 1st edition, 1968); I manually wrapped it at 80 characters per line to get the golden master