diff --git a/demo/static-highlighter/client-noconflict.html b/demo/static-highlighter/client-noconflict.html
index fa9d345d..ee589679 100644
--- a/demo/static-highlighter/client-noconflict.html
+++ b/demo/static-highlighter/client-noconflict.html
@@ -19,9 +19,10 @@
Syntax highlighting using Ace language modes and themes.
-
+
.code {
width: 50%;
+
position: relative;
white-space: pre-wrap;
}
@@ -41,28 +42,20 @@ function wobble (flam) {
diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css
index 277cd161..96cc27d7 100644
--- a/lib/ace/css/editor.css
+++ b/lib/ace/css/editor.css
@@ -231,10 +231,6 @@
border-left-width: 1px;
}
-.ace_line {
- white-space: nowrap;
-}
-
.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {
position: absolute;
z-index: 3;
diff --git a/lib/ace/ext/static_highlight.js b/lib/ace/ext/static_highlight.js
index 2119653a..56588f14 100644
--- a/lib/ace/ext/static_highlight.js
+++ b/lib/ace/ext/static_highlight.js
@@ -36,6 +36,49 @@ var TextLayer = require("../layer/text").Text;
var baseStyles = require("../requirejs/text!./static.css");
var config = require("../config");
var dom = require("../lib/dom");
+
+
+var highlight = function(el, opts, callback) {
+ var m = el.className.match(/lang-(\w+)/);
+ var mode = opts.mode || m && ("ace/mode/" + m[1]);
+ if (!mode)
+ return false;
+ var theme = opts.theme || "ace/theme/textmate";
+
+ var data = "";
+ var nodes = [];
+
+ if (el.firstElementChild) {
+ var textLen = 0;
+ for (var i = 0; i < el.childNodes.length; i++) {
+ var ch = el.childNodes[i];
+ if (ch.nodeType == 3) {
+ textLen += ch.data.length;
+ data += ch.data;
+ } else {
+ nodes.push(textLen, ch);
+ }
+ }
+ } else {
+ data = dom.getInnerText(el);
+ if (opts.trim)
+ data = data.trim();
+ }
+
+ highlight.render(data, mode, theme, opts.firstLineNumber, !opts.showGutter, function (highlighted) {
+ dom.importCssString(highlighted.css, "ace_highlight");
+ el.innerHTML = highlighted.html;
+ var container = el.firstChild.firstChild;
+ for (var i = 0; i < nodes.length; i += 2) {
+ var pos = highlighted.session.doc.indexToPosition(nodes[i]);
+ var node = nodes[i + 1];
+ var lineEl = container.children[pos.row];
+ lineEl && lineEl.appendChild(node);
+ }
+ callback && callback();
+ });
+};
+
/**
* Transforms a given input code snippet into HTML using the given mode
*
@@ -56,7 +99,7 @@ var dom = require("../lib/dom");
* @returns {object} An object containing the properties `html` and `css`.
*/
-exports.render = function(input, mode, theme, lineStart, disableGutter, callback) {
+highlight.render = function(input, mode, theme, lineStart, disableGutter, callback) {
var waiting = 0;
var modeCache = EditSession.prototype.$modes;
@@ -81,7 +124,7 @@ exports.render = function(input, mode, theme, lineStart, disableGutter, callback
// loads or passes the specified mode module then calls renderer
function done() {
- var result = exports.renderSync(input, mode, theme, lineStart, disableGutter);
+ var result = highlight.renderSync(input, mode, theme, lineStart, disableGutter);
return callback ? callback(result) : result;
}
return waiting || done();
@@ -95,7 +138,7 @@ exports.render = function(input, mode, theme, lineStart, disableGutter, callback
* @returns {object} An object containing: html, css
*/
-exports.renderSync = function(input, mode, theme, lineStart, disableGutter) {
+highlight.renderSync = function(input, mode, theme, lineStart, disableGutter) {
lineStart = parseInt(lineStart || 1, 10);
var session = new EditSession("");
@@ -119,7 +162,7 @@ exports.renderSync = function(input, mode, theme, lineStart, disableGutter) {
if (!disableGutter)
stringBuilder.push("" + (ix + lineStart) + "");
textLayer.$renderLine(stringBuilder, ix, true, false);
- stringBuilder.push("
");
+ stringBuilder.push("\n
");
}
// let's prepare the whole html
@@ -133,48 +176,11 @@ exports.renderSync = function(input, mode, theme, lineStart, disableGutter) {
return {
css: baseStyles + theme.cssText,
- html: html
+ html: html,
+ session: session
};
};
-
-
-exports.highlight = function(el, opts, callback) {
- var m = el.className.match(/lang-(\w+)/);
- var mode = opts.mode || m && ("ace/mode/" + m[1]);
- if (!mode)
- return false;
- var theme = opts.theme || "ace/theme/textmate";
-
- var data = "";
- var nodes = [];
-
- if (el.firstElementChild) {
- var textLen = 0;
- for (var i = 0; i < el.childNodes.length; i++) {
- var ch = el.childNodes[i];
- if (ch.nodeType == 3) {
- textLen += ch.data.length;
- data += ch.data;
- } else {
- nodes.push(textLen, ch);
- }
- }
- } else {
- data = dom.getInnerText(el);
- }
-
- exports.render(data, mode, theme, 1, true, function (highlighted) {
- dom.importCssString(highlighted.css, "ace_highlight");
- el.innerHTML = highlighted.html;
- var container = el.firstChild.firstChild
- for (var i = 0; i < nodes.length; i += 2) {
- var pos = highlighted.session.doc.indexToPosition(nodes[i])
- var node = nodes[i + 1];
- var lineEl = container.children[pos.row];
- lineEl && lineEl.appendChild(nodes[i+1]);
- }
- callback && callback();
- });
-};
+module.exports = highlight;
+module.exports.highlight =highlight;
});
diff --git a/lib/ace/ext/static_highlight_test.js b/lib/ace/ext/static_highlight_test.js
index bdbecbfc..63f0ebc3 100644
--- a/lib/ace/ext/static_highlight_test.js
+++ b/lib/ace/ext/static_highlight_test.js
@@ -28,7 +28,14 @@ module.exports = {
var mode = new JavaScriptMode();
var result = highlighter.render(snippet, mode, theme);
- assert.equal(result.html, "