diff --git a/demo/kitchen-sink/demo.js b/demo/kitchen-sink/demo.js
index e73c796b..7e5b0f1e 100644
--- a/demo/kitchen-sink/demo.js
+++ b/demo/kitchen-sink/demo.js
@@ -109,6 +109,7 @@ var modesByName = {
less: ["LESS" , "less"],
liquid: ["Liquid" , "liquid"],
lua: ["Lua" , "lua"],
+ luapage: ["LuaPage" , "lp"], // http://keplerproject.github.com/cgilua/manual.html#templates
markdown: ["Markdown" , "md|markdown"],
ocaml: ["OCaml" , "ml|mli"],
perl: ["Perl" , "pl|pm"],
@@ -186,6 +187,7 @@ var docs = {
"docs/ocaml.ml": "OCaml",
"docs/OpenSCAD.scad": "OpenSCAD",
"docs/lua.lua": "Lua",
+ "docs/luapage.lp": "LuaPage",
"docs/liquid.liquid": "Liquid",
"docs/java.java": "Java",
"docs/clojure.clj": "Clojure",
diff --git a/demo/kitchen-sink/docs/luapage.lp b/demo/kitchen-sink/docs/luapage.lp
new file mode 100644
index 00000000..f70c992b
--- /dev/null
+++ b/demo/kitchen-sink/docs/luapage.lp
@@ -0,0 +1,71 @@
+
+
+<% --[[--
+ index.lp from the Kepler Project's LuaDoc HTML doclet.
+ http://keplerproject.github.com/luadoc/
+--]] %>
+
+ Reference
+ " type="text/css" />
+
+
+
+
+
+
+
+
+
+
+
+<%=luadoc.doclet.html.include("menu.lp", { doc=doc })%>
+
+
+
+
+
+
+<%if not options.nomodules and #doc.modules > 0 then%>
+
Modules
+
+
+<%for _, modulename in ipairs(doc.modules) do%>
+
+ | <%=modulename%> |
+ <%=doc.modules[modulename].summary%> |
+
+<%end%>
+
+<%end%>
+
+
+
+<%if not options.nofiles and #doc.files > 0 then%>
+
Files
+
+
+<%for _, filepath in ipairs(doc.files) do%>
+
+ | <%=filepath%> |
+ |
+
+<%end%>
+
+<%end%>
+
+
+
+
+
+
+

+
+
+
+
+
diff --git a/kitchen-sink.html b/kitchen-sink.html
index 55b43635..6712e59d 100644
--- a/kitchen-sink.html
+++ b/kitchen-sink.html
@@ -67,6 +67,7 @@
+
diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css
index 4634b1ec..d53a135b 100644
--- a/lib/ace/css/editor.css
+++ b/lib/ace/css/editor.css
@@ -51,9 +51,11 @@
.ace_gutter-cell.ace_info {
background-image: url("data:image/gif;base64,R0lGODlhEAAQAMQAAAAAAEFBQVJSUl5eXmRkZGtra39/f4WFhYmJiZGRkaampry8vMPDw8zMzNXV1dzc3OTk5Orq6vDw8P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABQALAAAAAAQABAAAAUuICWOZGmeaBml5XGwFCQSBGyXRSAwtqQIiRuiwIM5BoYVbEFIyGCQoeJGrVptIQA7");
- background-repeat: no-repeat;
background-position: 2px center;
}
+.ace_dark .ace_gutter-cell.ace_info {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGRTk5MTVGREIxNDkxMUUxOTc5Q0FFREQyMTNGMjBFQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGRTk5MTVGRUIxNDkxMUUxOTc5Q0FFREQyMTNGMjBFQyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkZFOTkxNUZCQjE0OTExRTE5NzlDQUVERDIxM0YyMEVDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkZFOTkxNUZDQjE0OTExRTE5NzlDQUVERDIxM0YyMEVDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+SIDkjAAAAJ1JREFUeNpi/P//PwMlgImBQkB7A6qrq/+DMC55FkIGKCoq4pVnpFkgTp069f/+/fv/r1u37r+tre1/kg0A+ptn9uzZYLaRkRHpLvjw4cNXWVlZhufPnzOcO3eOdAO0tbVPAjHDmzdvGA4fPsxIsgGSkpJmv379Ynj37h2DjIyMCMkG3LhxQ/T27dsMampqDHZ2dq/pH41DxwCAAAMAFdc68dUsFZgAAAAASUVORK5CYII=");
+}
.ace_editor .ace_sb {
position: absolute;
@@ -247,9 +249,11 @@
background-image: url("data:image/png,%89PNG%0D%0A%1A%0A%00%00%00%0DIHDR%00%00%00%05%00%00%00%05%08%06%00%00%00%8Do%26%E5%00%00%004IDATx%DAe%8A%B1%0D%000%0C%C2%F2%2CK%96%BC%D0%8F9%81%88H%E9%D0%0E%96%C0%10%92%3E%02%80%5E%82%E4%A9*-%EEsw%C8%CC%11%EE%96w%D8%DC%E9*Eh%0C%151(%00%00%00%00IEND%AEB%60%82");
background-repeat: no-repeat;
- background-position: center 5px;
+ background-position: center 4px;
border-radius: 3px;
+
+ border: 1px solid transparent;
}
.ace_fold-widget.end {
@@ -263,11 +267,8 @@
.ace_fold-widget:hover {
border: 1px solid rgba(0, 0, 0, 0.3);
background-color: rgba(255, 255, 255, 0.2);
- -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);
-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);
- -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);
-webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);
- box-shadow:inset 0 1px 1px rgba(255, 255, 255, 0.7);
box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);
background-position: center 4px;
}
@@ -275,14 +276,34 @@
.ace_fold-widget:active {
border: 1px solid rgba(0, 0, 0, 0.4);
background-color: rgba(0, 0, 0, 0.05);
- -moz-box-shadow:inset 0 1px 1px rgba(255, 255, 255);
-moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
- -webkit-box-shadow:inset 0 1px 1px rgba(255, 255, 255);
-webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
- box-shadow:inset 0 1px 1px rgba(255, 255, 255);
box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
}
-
+/**
+ * Dark version for fold widgets
+ */
+.ace_dark .ace_fold-widget {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");
+}
+.ace_dark .ace_fold-widget.end {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");
+}
+.ace_dark .ace_fold-widget.closed {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");
+}
+.ace_dark .ace_fold-widget:hover {
+ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);
+ background-color: rgba(255, 255, 255, 0.1);
+}
+.ace_dark .ace_fold-widget:active {
+ -moz-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);
+ -webkit-box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);
+ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);
+}
+
+
+
.ace_fold-widget.invalid {
background-color: #FFB4B4;
border-color: #DE5555;
diff --git a/lib/ace/mode/luapage.js b/lib/ace/mode/luapage.js
new file mode 100644
index 00000000..03ee19d1
--- /dev/null
+++ b/lib/ace/mode/luapage.js
@@ -0,0 +1,22 @@
+define(function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var HtmlMode = require("./html").Mode;
+var LuaMode = require("./lua").Mode;
+var Tokenizer = require("../tokenizer").Tokenizer;
+var LuaPageHighlightRules = require("./luapage_highlight_rules").LuaPageHighlightRules;
+
+var Mode = function() {
+ var highlighter = new LuaPageHighlightRules();
+
+ this.$tokenizer = new Tokenizer(new LuaPageHighlightRules().getRules());
+ this.$embeds = highlighter.getEmbeds();
+ this.createModeDelegates({
+ "lua-": LuaMode
+ });
+};
+oop.inherits(Mode, HtmlMode);
+
+exports.Mode = Mode;
+});
\ No newline at end of file
diff --git a/lib/ace/mode/luapage_highlight_rules.js b/lib/ace/mode/luapage_highlight_rules.js
new file mode 100644
index 00000000..d79581c3
--- /dev/null
+++ b/lib/ace/mode/luapage_highlight_rules.js
@@ -0,0 +1,42 @@
+// LuaPage implements the LuaPage markup as described by the Kepler Project's CGILua
+// documentation: http://keplerproject.github.com/cgilua/manual.html#templates
+define(function(require, exports, module) {
+"use strict";
+
+var oop = require("../lib/oop");
+var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
+var LuaHighlightRules = require("./lua_highlight_rules").LuaHighlightRules;
+
+var LuaPageHighlightRules = function() {
+ this.$rules = new HtmlHighlightRules().getRules();
+
+ for (var i in this.$rules) {
+ this.$rules[i].unshift({
+ token: "keyword",
+ regex: "<\\%\\=?",
+ next: "lua-start"
+ }, {
+ token: "keyword",
+ regex: "<\\?lua\\=?",
+ next: "lua-start"
+ });
+ }
+ this.embedRules(LuaHighlightRules, "lua-", [
+ {
+ token: "keyword",
+ regex: "\\%>",
+ next: "start"
+ },
+ {
+ token: "keyword",
+ regex: "\\?>",
+ next: "start"
+ }
+ ]);
+};
+
+oop.inherits(LuaPageHighlightRules, HtmlHighlightRules);
+
+exports.LuaPageHighlightRules = LuaPageHighlightRules;
+
+});
\ No newline at end of file