123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- ace.define("ace/ext/hardwrap",["require","exports","module","ace/range","ace/editor","ace/config"], function(require, exports, module){"use strict";
- var Range = require("../range").Range;
- function hardWrap(editor, options) {
- var max = options.column || editor.getOption("printMarginColumn");
- var allowMerge = options.allowMerge != false;
- 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) {
- var indentation = /^\s*/.exec(line)[0];
- session.replace(new Range(row, space.start, row, space.end), "\n" + indentation);
- }
- endRow++;
- }
- else if (allowMerge && /\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--;
- }
- else if (trimmedLine.length < line.length) {
- session.remove(new Range(row, trimmedLine.length, row, line.length));
- }
- }
- }
- 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[2].length
- };
- }
- if (spaceAfter && spaceAfter[2]) {
- start = max + spaceAfter[2].length;
- return {
- start: start,
- end: start + spaceAfter[3].length
- };
- }
- }
- }
- function wrapAfterInput(e) {
- if (e.command.name == "insertstring" && /\S/.test(e.args)) {
- var editor = e.editor;
- var cursor = editor.selection.cursor;
- if (cursor.column <= editor.renderer.$printMarginColumn)
- return;
- var lastDelta = editor.session.$undoManager.$lastDelta;
- hardWrap(editor, {
- startRow: cursor.row, endRow: cursor.row,
- allowMerge: false
- });
- if (lastDelta != editor.session.$undoManager.$lastDelta)
- editor.session.markUndoGroup();
- }
- }
- var Editor = require("../editor").Editor;
- require("../config").defineOptions(Editor.prototype, "editor", {
- hardWrap: {
- set: function (val) {
- if (val) {
- this.commands.on("afterExec", wrapAfterInput);
- }
- else {
- this.commands.off("afterExec", wrapAfterInput);
- }
- },
- value: false
- }
- });
- exports.hardWrap = hardWrap;
- }); (function() {
- ace.require(["ace/ext/hardwrap"], function(m) {
- if (typeof module == "object" && typeof exports == "object" && module) {
- module.exports = m;
- }
- });
- })();
-
|