From 58e1410adfda6ef1170d058ab22b76b7f920f557 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 21 Sep 2013 14:55:53 +0400 Subject: [PATCH 1/4] fix #1614 Gutter tooltip not showing inside relative container --- lib/ace/mouse/default_gutter_handler.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/ace/mouse/default_gutter_handler.js b/lib/ace/mouse/default_gutter_handler.js index 9437d2e4..1ad8119c 100644 --- a/lib/ace/mouse/default_gutter_handler.js +++ b/lib/ace/mouse/default_gutter_handler.js @@ -113,11 +113,12 @@ function GutterHandler(mouseHandler) { var rect = editor.renderer.$gutter.getBoundingClientRect(); tooltip.style.left = e.x + 15 + "px"; if (e.y + 3 * editor.renderer.lineHeight + 15 < rect.bottom) { - tooltip.style.bottom = ""; + tooltip.style.bottom = ""; tooltip.style.top = e.y + 15 + "px"; } else { - tooltip.style.top = ""; - tooltip.style.bottom = rect.bottom - e.y + 5 + "px"; + tooltip.style.top = ""; + var innerHeight = window.innerHeight || document.documentElement.clientHeight; + tooltip.style.bottom = innerHeight - e.y + 5 + "px"; } } From 9a70c98fc413602bcc2091ec5c53d5545f332b9b Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 21 Sep 2013 15:38:06 +0400 Subject: [PATCH 2/4] ini fold mode --- lib/ace/mode/folding/ini.js | 80 ++++++++++++++++++++ lib/ace/mode/ini.js | 11 +-- lib/ace/mode/ini_highlight_rules.js | 112 ++++++++++++++++------------ lib/ace/mode/toml.js | 3 +- 4 files changed, 145 insertions(+), 61 deletions(-) create mode 100644 lib/ace/mode/folding/ini.js diff --git a/lib/ace/mode/folding/ini.js b/lib/ace/mode/folding/ini.js new file mode 100644 index 00000000..ef4eaa0b --- /dev/null +++ b/lib/ace/mode/folding/ini.js @@ -0,0 +1,80 @@ +/* ***** 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 BaseFoldMode = require("./fold_mode").FoldMode; + +var FoldMode = exports.FoldMode = function() { +}; +oop.inherits(FoldMode, BaseFoldMode); + +(function() { + + this.foldingStartMarker = /^\s*\[([^\])]*)]\s*(?:$|[;#])/; + + this.getFoldWidgetRange = function(session, foldStyle, row) { + var re = this.foldingStartMarker; + var line = session.getLine(row); + + var m = line.match(re); + + if (!m) return; + + var startName = m[1] + "."; + + var startColumn = line.length; + var maxRow = session.getLength(); + var startRow = row; + var endRow = row; + + while (++row < maxRow) { + line = session.getLine(row); + if (/^\s*$/.test(line)) + continue; + m = line.match(re); + if (m && m[1].lastIndexOf(startName, 0) !== 0) + break; + + endRow = row; + } + + if (endRow > startRow) { + var endColumn = session.getLine(endRow).length; + return new Range(startRow, startColumn, endRow, endColumn); + } + }; + +}).call(FoldMode.prototype); + +}); diff --git a/lib/ace/mode/ini.js b/lib/ace/mode/ini.js index cd21990a..8e660061 100644 --- a/lib/ace/mode/ini.js +++ b/lib/ace/mode/ini.js @@ -26,17 +26,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * - * Contributor(s): - * - * - * * ***** END LICENSE BLOCK ***** */ -/* - THIS FILE WAS AUTOGENERATED BY mode.tmpl.js -*/ - define(function(require, exports, module) { "use strict"; @@ -45,7 +36,7 @@ var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var IniHighlightRules = require("./ini_highlight_rules").IniHighlightRules; // TODO: pick appropriate fold mode -var FoldMode = require("./folding/cstyle").FoldMode; +var FoldMode = require("./folding/ini").FoldMode; var Mode = function() { var highlighter = new IniHighlightRules(); diff --git a/lib/ace/mode/ini_highlight_rules.js b/lib/ace/mode/ini_highlight_rules.js index b4c152a4..8ce3d949 100644 --- a/lib/ace/mode/ini_highlight_rules.js +++ b/lib/ace/mode/ini_highlight_rules.js @@ -29,10 +29,6 @@ * ***** END LICENSE BLOCK ***** */ /* This file was autogenerated from tool\tm bundles\ini.tmbundle\Syntaxes\Ini.plist (uuid: ) */ -/**************************************************************************************** - * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. * - * fileTypes * - ****************************************************************************************/ define(function(require, exports, module) { "use strict"; @@ -40,56 +36,74 @@ define(function(require, exports, module) { var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; -var IniHighlightRules = function() { - // regexp must not have capturing parentheses. Use (?:) instead. - // regexps are ordered -> the first match is used +var escapeRe = "\\\\(?:[\\\\0abtrn;#=:]|x[a-fA-F\\d]{4})"; - this.$rules = { start: - [ { token: 'punctuation.definition.comment.ini', - regex: '#.*', - push_: - [ { token: 'comment.line.number-sign.ini', - regex: '$', - next: 'pop' }, - { defaultToken: 'comment.line.number-sign.ini' } ] }, - { token: 'punctuation.definition.comment.ini', - regex: ';.*', - push_: - [ { token: 'comment.line.semicolon.ini', regex: '$', next: 'pop' }, - { defaultToken: 'comment.line.semicolon.ini' } ] }, - { token: - [ 'keyword.other.definition.ini', - 'text', - 'punctuation.separator.key-value.ini' ], - regex: '\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)' }, - { token: - [ 'punctuation.definition.entity.ini', - 'constant.section.group-title.ini', - 'punctuation.definition.entity.ini' ], - regex: '^(\\[)(.*?)(\\])' }, - { token: 'punctuation.definition.string.begin.ini', - regex: '\'', - push: - [ { token: 'punctuation.definition.string.end.ini', - regex: '\'', - next: 'pop' }, - { token: 'constant.character.escape.ini', regex: '\\\\.' }, - { defaultToken: 'string.quoted.single.ini' } ] }, - { token: 'punctuation.definition.string.begin.ini', - regex: '"', - push: - [ { token: 'punctuation.definition.string.end.ini', +var IniHighlightRules = function() { + this.$rules = { + start: [{ + token: 'punctuation.definition.comment.ini', + regex: '#.*', + push_: [{ + token: 'comment.line.number-sign.ini', + regex: '$|^', + next: 'pop' + }, { + defaultToken: 'comment.line.number-sign.ini' + }] + }, { + token: 'punctuation.definition.comment.ini', + regex: ';.*', + push_: [{ + token: 'comment.line.semicolon.ini', + regex: '$|^', + next: 'pop' + }, { + defaultToken: 'comment.line.semicolon.ini' + }] + }, { + token: ['keyword.other.definition.ini', 'text', 'punctuation.separator.key-value.ini'], + regex: '\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)' + }, { + token: ['punctuation.definition.entity.ini', 'constant.section.group-title.ini', 'punctuation.definition.entity.ini'], + regex: '^(\\[)(.*?)(\\])' + }, { + token: 'punctuation.definition.string.begin.ini', + regex: "'", + push: [{ + token: 'punctuation.definition.string.end.ini', + regex: "'", + next: 'pop' + }, { + token: "constant.language.escape", + regex: escapeRe + }, { + defaultToken: 'string.quoted.single.ini' + }] + }, { + token: 'punctuation.definition.string.begin.ini', + regex: '"', + push: [{ + token: "constant.language.escape", + regex: escapeRe + }, { + token: 'punctuation.definition.string.end.ini', regex: '"', - next: 'pop' }, - { defaultToken: 'string.quoted.double.ini' } ] } ] } - + next: 'pop' + }, { + defaultToken: 'string.quoted.double.ini' + }] + }] + }; + this.normalizeRules(); }; -IniHighlightRules.metaData = { fileTypes: [ 'ini', 'conf' ], - keyEquivalent: '^~I', - name: 'Ini', - scopeName: 'source.ini' } +IniHighlightRules.metaData = { + fileTypes: ['ini', 'conf'], + keyEquivalent: '^~I', + name: 'Ini', + scopeName: 'source.ini' +}; oop.inherits(IniHighlightRules, TextHighlightRules); diff --git a/lib/ace/mode/toml.js b/lib/ace/mode/toml.js index bd47182f..dab36136 100644 --- a/lib/ace/mode/toml.js +++ b/lib/ace/mode/toml.js @@ -40,8 +40,7 @@ var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var TomlHighlightRules = require("./toml_highlight_rules").TomlHighlightRules; -// TODO: pick appropriate fold mode -var FoldMode = require("./folding/cstyle").FoldMode; +var FoldMode = require("./folding/ini").FoldMode; var Mode = function() { var highlighter = new TomlHighlightRules(); From e47caa459ba8b09237441cbda554cebd118b2141 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 21 Sep 2013 17:03:40 +0400 Subject: [PATCH 3/4] update site --- doc/site/style.css | 2 ++ index.html | 35 ++++++++++++++++++++++++++--------- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/doc/site/style.css b/doc/site/style.css index 4e79b5fb..1167340a 100644 --- a/doc/site/style.css +++ b/doc/site/style.css @@ -497,11 +497,13 @@ img { .rotating-logo { -webkit-transform: rotate(0deg); + transform: rotate(0deg); -webkit-transition: all 0.5s ease-out; transition: all 0.5s ease-out; } .rotating-logo:hover { -webkit-transform: rotate(360deg); + transform: rotate(360deg); -webkit-transition: all 0.5s ease-in-out; transition: all 0.5s ease-in-out; } \ No newline at end of file diff --git a/index.html b/index.html index f2a26c2c..da795d5f 100644 --- a/index.html +++ b/index.html @@ -780,9 +780,9 @@ if (match) { Application Craft
  • - - Wolf CMS + + StackEdit
  • @@ -841,7 +841,7 @@ if (match) {
  • + left: 19px; top: 6px;width: 60px;height: 60px;background-size: 60px;position: relative;"> Inkling Habitat
  • @@ -1037,7 +1037,7 @@ if (match) { iKnode
  • -
    sT
    SourceTalk
  • @@ -1075,15 +1075,15 @@ if (match) { ogEditor
  • - + Try allong.es
  • - + NapCat
  • - + CorsLit
  • @@ -1092,9 +1092,26 @@ if (match) { OJjs
  • - + Codechat
  • +
  • + + Wolf CMS +
  • +
  • + + Scriptie-Talkie +
  • +
  • + + browserify-markdown-editor +
  • +
  • + + BakeMyCss +
  • Sky Edit
  • From d22626771b3bfa5432f3182bd12e6e66628ff096 Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 21 Sep 2013 20:44:19 +0400 Subject: [PATCH 4/4] improve csharp folding --- lib/ace/mode/csharp.js | 2 +- lib/ace/mode/csharp_highlight_rules.js | 3 + lib/ace/mode/folding/csharp.js | 138 +++++++++++++++++++++++++ 3 files changed, 142 insertions(+), 1 deletion(-) create mode 100644 lib/ace/mode/folding/csharp.js diff --git a/lib/ace/mode/csharp.js b/lib/ace/mode/csharp.js index 66644b45..0ef0101c 100644 --- a/lib/ace/mode/csharp.js +++ b/lib/ace/mode/csharp.js @@ -7,7 +7,7 @@ var Tokenizer = require("../tokenizer").Tokenizer; var CSharpHighlightRules = require("./csharp_highlight_rules").CSharpHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; -var CStyleFoldMode = require("./folding/cstyle").FoldMode; +var CStyleFoldMode = require("./folding/csharp").FoldMode; var Mode = function() { var highlighter = new CSharpHighlightRules(); diff --git a/lib/ace/mode/csharp_highlight_rules.js b/lib/ace/mode/csharp_highlight_rules.js index c18be8ea..89cbc2d5 100644 --- a/lib/ace/mode/csharp_highlight_rules.js +++ b/lib/ace/mode/csharp_highlight_rules.js @@ -56,6 +56,9 @@ var CSharpHighlightRules = function() { }, { token : "keyword.operator", regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" + }, { + token : "keyword", + regex : "^\\s*#(if|else|elif|endif|define|undef|warning|error|line|region|endregion|pragma)" }, { token : "punctuation.operator", regex : "\\?|\\:|\\,|\\;|\\." diff --git a/lib/ace/mode/folding/csharp.js b/lib/ace/mode/folding/csharp.js new file mode 100644 index 00000000..c4507534 --- /dev/null +++ b/lib/ace/mode/folding/csharp.js @@ -0,0 +1,138 @@ +/* ***** 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.usingRe = /^\s*using \S/; + + 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"; + var usingRe = this.usingRe; + if (usingRe.test(line)) { + var prev = session.getLine(row - 1); + var next = session.getLine(row + 1); + if (!usingRe.test(prev) && usingRe.test(next)) + return "start" + } + } + return fw; + }; + + this.getFoldWidgetRange = function(session, foldStyle, row) { + var range = this.getFoldWidgetRangeBase(session, foldStyle, row); + if (range) + return range; + + var line = session.getLine(row); + if (this.usingRe.test(line)) + return this.getUsingStatementBlock(session, line, row); + + if (/^\s*#region\b/.test(line)) + return this.getRegionBlock(session, line, row); + }; + + this.getUsingStatementBlock = function(session, line, row) { + var startColumn = line.match(this.usingRe)[0].length - 1; + var maxRow = session.getLength(); + var startRow = row; + var endRow = row; + + while (++row < maxRow) { + line = session.getLine(row); + if (/^\s*$/.test(line)) + continue; + if (!this.usingRe.test(line)) + break; + + endRow = row; + } + + if (endRow > startRow) { + var endColumn = session.getLine(endRow).length; + return new Range(startRow, startColumn, endRow, endColumn); + } + }; + + 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); + +});