From f26841da41ab94ba1aef8a8eff11fde51915d009 Mon Sep 17 00:00:00 2001 From: sevin7676 Date: Mon, 24 Nov 2014 09:48:41 -0500 Subject: [PATCH] tested and cleaned up --- lib/ace/mode/folding/cstyle.js | 45 ++++++------- lib/ace/mode/folding/javascript.js | 104 ----------------------------- 2 files changed, 21 insertions(+), 128 deletions(-) delete mode 100644 lib/ace/mode/folding/javascript.js diff --git a/lib/ace/mode/folding/cstyle.js b/lib/ace/mode/folding/cstyle.js index d7541f06..d9821d1b 100644 --- a/lib/ace/mode/folding/cstyle.js +++ b/lib/ace/mode/folding/cstyle.js @@ -51,30 +51,36 @@ oop.inherits(FoldMode, BaseFoldMode); this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; - // this.startBlockRegionRe = /^\s*\/\*#region\b/; - // this.startLineRegionRe = /^\s*\/\/#region\b/; this.startRegionRe = /^\s*((\/\*)|(\/\/))#region\b/; this.getFoldWidgetBase = this.getFoldWidget; + /** + * Gets fold widget with some non-standard extras: + * + * @example lineCommentRegionStart + * //#region [optional description] + * + * @example blockCommentRegionStart + * /*#region [optional description] *[/] + * + * @example tripleStarFoldingSection + * /*** this folds even though 1 line because it has 3 stars ***[/] + */ this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row).trim(); - + var isRegionStart = this.startRegionRe.test(line); - + if (line.length > 3 && line.substring(0, 2) === '/*' && line.substring(line.length - 2) === '*/') { - // Don't create fold widgets for single line block comments - // unless its a region start comment, or it starts with 3 stars [/***] - if (line.substring(0, 4) !== '/***' && !isRegionStart /*!this.startBlockRegionRe.test(line)*/) + if (!isRegionStart && line.substring(0, 4) !== '/***') return ""; } - + var fw = this.getFoldWidgetBase(session, foldStyle, row); - if (!fw) { - // check for block comment region start - if(isRegionStart) /*if (this.startLineRegionRe.test(line)) */ - return "start"; - } + if (!fw && isRegionStart) + return "start"; // lineCommentRegionStart + return fw; }; @@ -84,15 +90,6 @@ oop.inherits(FoldMode, BaseFoldMode); if(this.startRegionRe.test(line)) return this.getRegionBlock(session, line, row); - /*// first check for block comment region - if (this.startBlockRegionRe.test(line)) - return this.getRegionBlock(session, line, row, true); - - // now check for line comment region - if (this.startLineRegionRe.test(line)) - return this.getRegionBlock(session, line, row, false);*/ - - var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; @@ -163,7 +160,7 @@ oop.inherits(FoldMode, BaseFoldMode); var maxRow = session.getLength(); var startRow = row; - var re = /^\s*((\/\*)|(\/\/))#(end)?region\b/;// isBlock? /^\s*\/\*#(end)?region\b/ : /^\s*\/\/#(end)?region\b/; + var re = /^\s*((\/\*)|(\/\/))#(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); @@ -178,7 +175,7 @@ oop.inherits(FoldMode, BaseFoldMode); var endRow = row; if (endRow > startRow) { var endColumn = line.search(/\S/); - return new Range(startRow, startColumn, endRow, endColumn); + return new Range(startRow, startColumn, endRow, line.length); } }; diff --git a/lib/ace/mode/folding/javascript.js b/lib/ace/mode/folding/javascript.js deleted file mode 100644 index e92c6c3c..00000000 --- a/lib/ace/mode/folding/javascript.js +++ /dev/null @@ -1,104 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Distributed under the BSD license: - * - * Copyright (c) 2010, Ajax.org B.V. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Ajax.org B.V. nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ***** END LICENSE BLOCK ***** */ - -define(function(require, exports, module) { -"use strict"; - -var oop = require("../../lib/oop"); -var Range = require("../../range").Range; -var CFoldMode = require("./cstyle").FoldMode; - -var FoldMode = exports.FoldMode = function(commentRegex) { - if (commentRegex) { - this.foldingStartMarker = new RegExp( - this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) - ); - this.foldingStopMarker = new RegExp( - this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) - ); - } -}; -oop.inherits(FoldMode, CFoldMode); - -(function() { - this.getFoldWidgetRangeBase = this.getFoldWidgetRange; - this.getFoldWidgetBase = this.getFoldWidget; - - this.getFoldWidget = function(session, foldStyle, row) { - var fw = this.getFoldWidgetBase(session, foldStyle, row); - if (!fw) { - var line = session.getLine(row); - if (/^\s*\/\/#region\b/.test(line)) - return "start"; - } - return fw; - }; - - this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { - var range = this.getFoldWidgetRangeBase(session, foldStyle, row, forceMultiline); - if (range) - return range; - - var line = session.getLine(row); - if (/^\s*\/\/#region\b/.test(line)) - return this.getRegionBlock(session, line, row); - }; - - this.getRegionBlock = function(session, line, row) { - var startColumn = line.search(/\s*$/); - var maxRow = session.getLength(); - var startRow = row; - - var re = /^\s*\/\/#(end)?region\b/; - var depth = 1; - while (++row < maxRow) { - line = session.getLine(row); - var m = re.exec(line); - if (!m) - continue; - if (m[1]) - depth--; - else - depth++; - - if (!depth) - break; - } - - var endRow = row; - if (endRow > startRow) { - var endColumn = line.search(/\S/); - return new Range(startRow, startColumn, endRow, endColumn); - } - }; - -}).call(FoldMode.prototype); - -});