ace.define("ace/ext/hardwrap",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; function hardWrap(editor, options) { var max = options.column || editor.getOption("printMarginColumn"); var row = Math.min(options.startRow, options.endRow); var endRow = Math.max(options.startRow, options.endRow); var session = editor.session; while (row <= endRow) { var line = session.getLine(row); if (line.length > max) { var space = findSpace(line, max, 5); if (space) { session.replace(new Range(row,space.start,row,space.end), "\n"); } endRow++; } else if (/\S/.test(line) && row != endRow) { var nextLine = session.getLine(row + 1); if (nextLine && /\S/.test(nextLine)) { var trimmedLine = line.replace(/\s+$/, ""); var trimmedNextLine = nextLine.replace(/^\s+/, ""); var mergedLine = trimmedLine + " " + trimmedNextLine; var space = findSpace(mergedLine, max, 5); if (space && space.start > trimmedLine.length || mergedLine.length < max) { var replaceRange = new Range(row,trimmedLine.length,row + 1,nextLine.length - trimmedNextLine.length); session.replace(replaceRange, " "); row--; endRow--; } } } row++; } function findSpace(line, max, min) { if (line.length < max) return; var before = line.slice(0, max); var after = line.slice(max); var spaceAfter = /^(?:(\s+)|(\S+)(\s+))/.exec(after); var spaceBefore = /(?:(\s+)|(\s+)(\S+))$/.exec(before); var start = 0; var end = 0; if (spaceBefore && !spaceBefore[2]) { start = max - spaceBefore[1].length; end = max; } if (spaceAfter && !spaceAfter[2]) { if (!start) start = max; end = max + spaceAfter[1].length; } if (start) { return { start: start, end: end }; } if (spaceBefore && spaceBefore[2] && spaceBefore.index > min) { return { start: spaceBefore.index, end: spaceBefore.index + spaceBefore[3].length }; } } } exports.hardWrap = hardWrap; }); (function() { ace.require(["ace/ext/hardwrap"], function(m) { if (typeof module == "object" && typeof exports == "object" && module) { module.exports = m; } }); })();