diff --git a/demo/kitchen-sink/demo.js b/demo/kitchen-sink/demo.js index f3a163e5..71b6faae 100644 --- a/demo/kitchen-sink/demo.js +++ b/demo/kitchen-sink/demo.js @@ -98,6 +98,7 @@ var modesByName = { clojure: ["Clojure" , "clj"], jade: ["Jade" , "jade"], java: ["Java" , "java"], + jsp: ["JSP" , "jsp"], javascript: ["JavaScript" , "js"], json: ["JSON" , "json"], jsx: ["JSX" , "jsx"], @@ -179,6 +180,7 @@ var docs = { "docs/html.html": "HTML", "docs/jade.jade": "Jade", "docs/java.java": "Java", + "docs/jsp.jsp": "JSP", "docs/json.json": "JSON", "docs/jsx.jsx": "JSX", "docs/latex.tex": {name: "LaTeX", wrapped: true}, diff --git a/demo/kitchen-sink/docs/jsp.jsp b/demo/kitchen-sink/docs/jsp.jsp new file mode 100644 index 00000000..43fbb835 --- /dev/null +++ b/demo/kitchen-sink/docs/jsp.jsp @@ -0,0 +1,46 @@ + + + + + +

+ Today's date: <%= (new java.util.Date()).toLocaleString()%> +

+ <%! int i = 0; %> + + int j = 10; + + + <%-- This is JSP comment --%> + <%@ directive attribute="value" %> + +

Select Languages:

+ +
+ Java
+ .NET
+ PHP
+ C/C++
+ PERL
+ +
+ + <% + String select[] = request.getParameterValues("id"); + if (select != null && select.length != 0) { + out.println("You have selected: "); + for (int i = 0; i < select.length; i++) { + out.println(select[i]); + } + } + %> + + \ No newline at end of file diff --git a/lib/ace/mode/jsp.js b/lib/ace/mode/jsp.js new file mode 100644 index 00000000..67c1f25c --- /dev/null +++ b/lib/ace/mode/jsp.js @@ -0,0 +1,61 @@ +/* ***** 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 TextMode = require("./text").Mode; +var Tokenizer = require("../tokenizer").Tokenizer; +var JspHighlightRules = require("./jsp_highlight_rules").JspHighlightRules; +var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; +var Range = require("../range").Range; +var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; +var CStyleFoldMode = require("./folding/cstyle").FoldMode; + + +var JavaScriptMode = require("./javascript").Mode; +var CssMode = require("./css").Mode; + +var Mode = function() { + var highlighter = new JspHighlightRules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$outdent = new MatchingBraceOutdent(); + this.$behaviour = new CstyleBehaviour(); + this.foldingRules = new CStyleFoldMode(); +}; +oop.inherits(Mode, TextMode); + +(function() { + +}).call(Mode.prototype); + +exports.Mode = Mode; +}); diff --git a/lib/ace/mode/jsp_highlight_rules.js b/lib/ace/mode/jsp_highlight_rules.js new file mode 100644 index 00000000..da0033fc --- /dev/null +++ b/lib/ace/mode/jsp_highlight_rules.js @@ -0,0 +1,85 @@ +/* ***** 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 HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; +var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules; + +var JspHighlightRules = function() { + HtmlHighlightRules.call(this); + for (var i in this.$rules) { + this.$rules[i].unshift({ + token : "meta.tag", // jsp open tag + regex : "<%@?|<%=?|]+>", + next : "jsp-start" + }); + } + + var builtinVariables = 'request|response|out|session|' + + 'application|config|pageContext|page|Exception'; + + var keywords = 'page|include|taglib'; + + this.embedRules(JavaHighlightRules, "jsp-"); + + this.$rules["start"].unshift({ + token : "comment", + merge : true, + regex : "<%--", + next : "comment" + }); + + this.$rules["jsp-start"].unshift({ + token : "meta.tag", // jsp close tag + regex : "%>|<\\/jsp:[^>]+>", + next : "start" + }, + { + token: "variable.language", + regex : builtinVariables + }, { + token: "keyword", + regex : keywords + }); + + this.$rules.comment.unshift({ + token : "comment", + regex : ".*?--%>", + next : "start" + }); +}; + +oop.inherits(JspHighlightRules, HtmlHighlightRules); + +exports.JspHighlightRules = JspHighlightRules; +}); diff --git a/lib/ace/mode/php_highlight_rules.js b/lib/ace/mode/php_highlight_rules.js index 52e6c4a0..2841d0e9 100644 --- a/lib/ace/mode/php_highlight_rules.js +++ b/lib/ace/mode/php_highlight_rules.js @@ -1040,7 +1040,7 @@ oop.inherits(PhpLangHighlightRules, TextHighlightRules); var PhpHighlightRules = function() { - this.$rules = new HtmlHighlightRules().getRules(); + HtmlHighlightRules.call(this); for (var i in this.$rules) { this.$rules[i].unshift({ @@ -1059,9 +1059,7 @@ var PhpHighlightRules = function() { }); }; -oop.inherits(PhpHighlightRules, TextHighlightRules); - - +oop.inherits(PhpHighlightRules, HtmlHighlightRules); exports.PhpHighlightRules = PhpHighlightRules; });