Fabric.js 2.0 breakwords

My implementation of the breakWords textbox functionality from version 1 of fabric

by Justin Williamson

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/2.6.0/fabric.min.js"></script>
<canvas id="c" width="600" height="600"></canvas>

JavaScript

var _wrapLine = function(_line, lineIndex, desiredWidth, reservedSpace) {
    var lineWidth = 0,
        splitByGrapheme = this.splitByGrapheme,
        graphemeLines = [],
        line = [],
        // spaces in different languges?
        words = splitByGrapheme ? fabric.util.string.graphemeSplit(_line) : _line.split(this._wordJoiners),
        word = '',
        offset = 0,
        infix = splitByGrapheme ? '' : ' ',
        wordWidth = 0,
        infixWidth = 0,
        largestWordWidth = 0,
        lineJustStarted = true,
        additionalSpace = splitByGrapheme ? 0 : this._getWidthOfCharSpacing();
        
    reservedSpace = reservedSpace || 0;
    desiredWidth -= reservedSpace;
    for (var i = 0; i < words.length; i++) {
        // i would avoid resplitting the graphemes
        word = fabric.util.string.graphemeSplit(words[i]);
        wordWidth = this._measureWord(word, lineIndex, offset);
        offset += word.length;
        
        // Break the line if a word is wider than the set width
        if (this.breakWords && wordWidth >= desiredWidth) {
        
        	if (!lineJustStarted) {
            	line.push(infix);
                lineJustStarted = true;
            }
        	
            // Loop through each character in word
            for (var w = 0; w < word.length; w++) {
            	var letter = word[w];
                var letterWidth = this.getMeasuringContext().measureText(letter).width * this.fontSize / this.CACHE_FONT_SIZE;
                if (lineWidth + letterWidth > desiredWidth) {
                	graphemeLines.push(line);
                    line = [];
                    lineWidth = 0;
                } else {
                	line.push(letter);
                    lineWidth += letterWidth;
                }
            }
            word = [];
        } else {
        	lineWidth += infixWidth + wordWidth - additionalSpace;
        }

        if (lineWidth >= desiredWidth && !lineJustStarted) {
           ...