Merge remote-tracking branch 'jpallen/latex_highlighting' into gh-pages
Conflicts: demo/demo.js kitchen-sink.html
This commit is contained in:
commit
aaa7abe505
4 changed files with 108 additions and 2 deletions
11
demo/demo.js
11
demo/demo.js
|
|
@ -72,7 +72,7 @@ var TextileMode = require("ace/mode/textile").Mode;
|
|||
var TextMode = require("ace/mode/text").Mode;
|
||||
var GroovyMode = require("ace/mode/groovy").Mode;
|
||||
var ScalaMode = require("ace/mode/scala").Mode;
|
||||
|
||||
var LatexMode = require("ace/mode/latex").Mode;
|
||||
var UndoManager = require("ace/undomanager").UndoManager;
|
||||
|
||||
var vim = require("ace/keyboard/keybinding/vim").Vim;
|
||||
|
|
@ -197,6 +197,9 @@ exports.launch = function(env) {
|
|||
docs.scala.setMode(new ScalaMode());
|
||||
docs.scala.setUndoManager(new UndoManager());
|
||||
|
||||
docs.latex = new EditSession(require("ace/requirejs/text!demo/docs/latex.tex"));
|
||||
docs.latex.setMode(new LatexMode());
|
||||
docs.latex.setUndoManager(new UndoManager());
|
||||
|
||||
// Add a "name" property to all docs
|
||||
for (var doc in docs) {
|
||||
|
|
@ -241,7 +244,8 @@ exports.launch = function(env) {
|
|||
ocaml: new OcamlMode(),
|
||||
csharp: new CSharpMode(),
|
||||
groovy: new GroovyMode(),
|
||||
scala: new ScalaMode()
|
||||
scala: new ScalaMode(),
|
||||
latex: new LatexMode()
|
||||
};
|
||||
|
||||
function getMode() {
|
||||
|
|
@ -345,6 +349,9 @@ exports.launch = function(env) {
|
|||
else if (mode instanceof ScalaMode) {
|
||||
modeEl.value = "scala";
|
||||
}
|
||||
else if (mode instanceof LatexMode) {
|
||||
modeEl.value = "latex";
|
||||
}
|
||||
else {
|
||||
modeEl.value = "text";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
<option value="textile">Textile</option>
|
||||
<option value="groovy">Groovy</option>
|
||||
<option value="scala">Scala</option>
|
||||
<option value="latex">LaTeX</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -69,6 +70,7 @@
|
|||
<option value="textile">Textile</option>
|
||||
<option value="groovy">Groovy</option>
|
||||
<option value="scala">Scala</option>
|
||||
<option value="latex">LaTeX</option>
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
58
lib/ace/mode/latex.js
Normal file
58
lib/ace/mode/latex.js
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
define(function(require, exports, module) {
|
||||
|
||||
var oop = require("pilot/oop");
|
||||
var TextMode = require("ace/mode/text").Mode;
|
||||
var Tokenizer = require("ace/tokenizer").Tokenizer;
|
||||
var LatexHighlightRules = require("ace/mode/latex_highlight_rules").LatexHighlightRules;
|
||||
var Range = require("ace/range").Range;
|
||||
|
||||
var Mode = function()
|
||||
{
|
||||
this.$tokenizer = new Tokenizer(new LatexHighlightRules().getRules());
|
||||
};
|
||||
oop.inherits(Mode, TextMode);
|
||||
|
||||
(function()
|
||||
{
|
||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||
// This code is adapted from ruby.js
|
||||
var outdent = true;
|
||||
var outentedRows = [];
|
||||
|
||||
// LaTeX comments begin with % and go to the end of the line
|
||||
var commentRegEx = /^(\s*)\%/;
|
||||
|
||||
for (var i = startRow; i <= endRow; i++) {
|
||||
if (!commentRegEx.test(doc.getLine(i))) {
|
||||
outdent = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (outdent) {
|
||||
var deleteRange = new Range(0, 0, 0, 0);
|
||||
for (var i = startRow; i <= endRow; i++) {
|
||||
var line = doc.getLine(i);
|
||||
var m = line.match(commentRegEx);
|
||||
deleteRange.start.row = i;
|
||||
deleteRange.end.row = i;
|
||||
deleteRange.end.column = m[0].length;
|
||||
doc.replace(deleteRange, m[1]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
doc.indentRows(startRow, endRow, "%");
|
||||
}
|
||||
};
|
||||
|
||||
// There is no universally accepted way of indenting a tex document
|
||||
// so just maintain the indentation of the previous line
|
||||
this.getNextLineIndent = function(state, line, tab) {
|
||||
return this.$getIndent(line);
|
||||
};
|
||||
|
||||
}).call(Mode.prototype);
|
||||
|
||||
exports.Mode = Mode;
|
||||
|
||||
});
|
||||
39
lib/ace/mode/latex_highlight_rules.js
Normal file
39
lib/ace/mode/latex_highlight_rules.js
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
define(function(require, exports, module) {
|
||||
|
||||
var oop = require("pilot/oop");
|
||||
var TextHighlightRules = require("ace/mode/text_highlight_rules").TextHighlightRules;
|
||||
|
||||
var LatexHighlightRules = function()
|
||||
{
|
||||
this.$rules = {
|
||||
"start" : [
|
||||
{
|
||||
// A tex command e.g. \foo
|
||||
token : "keyword",
|
||||
regex : "\\\\(?:[^a-zA-Z]|[a-zA-Z]+)",
|
||||
},
|
||||
{
|
||||
// Curly and square braces
|
||||
token : "keyword",
|
||||
regex : "[\\{\\}\\]\\[]"
|
||||
},
|
||||
{
|
||||
// Inline math between two $ symbols
|
||||
token : "string",
|
||||
regex : "\\$(?:(?:\\\\.)|(?:[^\\$\\\\]))*?\\$"
|
||||
},
|
||||
{
|
||||
// A comment. Tex comments start with % and go to
|
||||
// the end of the line
|
||||
token : "comment",
|
||||
regex : "%.*$"
|
||||
}
|
||||
]
|
||||
};
|
||||
};
|
||||
|
||||
oop.inherits(LatexHighlightRules, TextHighlightRules);
|
||||
|
||||
exports.LatexHighlightRules = LatexHighlightRules;
|
||||
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue