Merge remote-tracking branch 'remotes/origin/master' into v-1.2

Conflicts:
	build
	lib/ace/document.js
This commit is contained in:
nightwing 2014-03-31 00:49:41 +04:00
commit ec97ad7904
97 changed files with 4349 additions and 3474 deletions

View file

@ -40,6 +40,7 @@ var snippetManager = require("./snippets").snippetManager;
var Autocomplete = function() {
this.autoInsert = true;
this.autoSelect = true;
this.keyboardHandler = new HashHandler();
this.keyboardHandler.bindKeys(this.commands);
@ -47,13 +48,15 @@ var Autocomplete = function() {
this.changeListener = this.changeListener.bind(this);
this.mousedownListener = this.mousedownListener.bind(this);
this.mousewheelListener = this.mousewheelListener.bind(this);
this.changeTimer = lang.delayedCall(function() {
this.updateCompletions(true);
}.bind(this))
};
(function() {
this.gatherCompletionsId = 0;
this.$init = function() {
this.popup = new AcePopup(document.body || document.documentElement);
this.popup.on("click", function(e) {
@ -69,15 +72,16 @@ var Autocomplete = function() {
this.popup.setData(this.completions.filtered);
var renderer = editor.renderer;
this.popup.setRow(this.autoSelect ? 0 : -1);
if (!keepPopupPosition) {
this.popup.setRow(0);
this.popup.setTheme(editor.getTheme());
this.popup.setFontSize(editor.getFontSize());
var lineHeight = renderer.layerConfig.lineHeight;
var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);
var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);
pos.left -= this.popup.getTextLeftOffset();
var rect = editor.container.getBoundingClientRect();
pos.top += rect.top - renderer.layerConfig.offset;
pos.left += rect.left - editor.renderer.scrollLeft;
@ -94,7 +98,11 @@ var Autocomplete = function() {
this.editor.off("mousedown", this.mousedownListener);
this.editor.off("mousewheel", this.mousewheelListener);
this.changeTimer.cancel();
if (this.popup && this.popup.isOpen) {
this.gatherCompletionsId = this.gatherCompletionsId + 1;
}
if (this.popup)
this.popup.hide();
@ -145,6 +153,7 @@ var Autocomplete = function() {
data = this.popup.getData(this.popup.getRow());
if (!data)
return false;
if (data.completer && data.completer.insertMatch) {
data.completer.insertMatch(this.editor);
} else {
@ -171,7 +180,11 @@ var Autocomplete = function() {
"Esc": function(editor) { editor.completer.detach(); },
"Space": function(editor) { editor.completer.detach(); editor.insert(" ");},
"Return": function(editor) { editor.completer.insertMatch(); },
"Return": function(editor) {
if (editor.completer.popup.getRow() == -1)
return false;
editor.completer.insertMatch();
},
"Shift-Return": function(editor) { editor.completer.insertMatch(true); },
"Tab": function(editor) { editor.completer.insertMatch(); },
@ -182,33 +195,36 @@ var Autocomplete = function() {
this.gatherCompletions = function(editor, callback) {
var session = editor.getSession();
var pos = editor.getCursorPosition();
var line = session.getLine(pos.row);
var prefix = util.retrievePrecedingIdentifier(line, pos.column);
this.base = editor.getCursorPosition();
this.base.column -= prefix.length;
var matches = [];
util.parForEach(editor.completers, function(completer, next) {
var total = editor.completers.length;
editor.completers.forEach(function(completer, i) {
completer.getCompletions(editor, session, pos, prefix, function(err, results) {
if (!err)
matches = matches.concat(results);
next();
});
}, function() {
// Fetch prefix again, because they may have changed by now
var pos = editor.getCursorPosition();
var line = session.getLine(pos.row);
callback(null, {
prefix: prefix,
matches: matches
prefix: util.retrievePrecedingIdentifier(line, pos.column),
matches: matches,
finished: (--total === 0)
});
});
});
return true;
};
this.showPopup = function(editor) {
if (this.editor)
this.detach();
this.activated = true;
this.editor = editor;
@ -223,10 +239,10 @@ var Autocomplete = function() {
editor.on("blur", this.blurListener);
editor.on("mousedown", this.mousedownListener);
editor.on("mousewheel", this.mousewheelListener);
this.updateCompletions();
};
this.updateCompletions = function(keepPopupPosition) {
if (keepPopupPosition && this.base && this.completions) {
var pos = this.editor.getCursorPosition();
@ -236,25 +252,62 @@ var Autocomplete = function() {
this.completions.setFilter(prefix);
if (!this.completions.filtered.length)
return this.detach();
if (this.completions.filtered.length == 1
&& this.completions.filtered[0].value == prefix
&& !this.completions.filtered[0].snippet)
return this.detach();
this.openPopup(this.editor, prefix, keepPopupPosition);
return;
}
// Save current gatherCompletions session, session is close when a match is insert
var _id = this.gatherCompletionsId;
this.gatherCompletions(this.editor, function(err, results) {
// Only detach if result gathering is finished
var doDetach = function() {
if (!results.finished) return;
return this.detach();
}.bind(this);
// Calcul prefix
var session = this.editor.getSession();
var pos = this.editor.getCursorPosition();
var line = session.getLine(pos.row);
var prefix = util.retrievePrecedingIdentifier(line, pos.column);
// Results matches
var matches = results && results.matches;
if (!matches || !matches.length)
return this.detach();
// TODO reenable this when we have proper change tracking
// TODO reenable this when we have proper change tracking
// if (matches.length == 1)
// return this.insertMatch(matches[0]);
// No prefix or no results -> close
if (!prefix || !prefix.length || !matches || !matches.length)
return doDetach();
// Wrong prefix or wrong session -> ignore
if (prefix.indexOf(results.prefix) != 0 || _id != this.gatherCompletionsId)
return;
this.completions = new FilteredList(matches);
this.completions.setFilter(results.prefix);
this.completions.setFilter(prefix);
var filtered = this.completions.filtered;
// No results
if (!filtered.length)
return this.detach();
return doDetach();
// One result equals to the prefix
if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)
return doDetach();
// Autoinsert if one result
if (this.autoInsert && filtered.length == 1)
return this.insertMatch(filtered[0]);
this.openPopup(this.editor, results.prefix, keepPopupPosition);
this.openPopup(this.editor, prefix, keepPopupPosition);
}.bind(this));
};
@ -299,16 +352,16 @@ var FilteredList = function(array, filterText, mutateData) {
matches = matches.sort(function(a, b) {
return b.exactMatch - a.exactMatch || b.score - a.score;
});
// make unique
var prev = null;
matches = matches.filter(function(item){
var caption = item.value || item.caption || item.snippet;
var caption = item.value || item.caption || item.snippet;
if (caption === prev) return false;
prev = caption;
return true;
});
this.filtered = matches;
};
this.filterCompletions = function(items, needle) {

View file

@ -43,7 +43,7 @@ var $singleLineEditor = function(el) {
var renderer = new Renderer(el);
renderer.$maxLines = 4;
var editor = new Editor(renderer);
editor.setHighlightActiveLine(false);
@ -59,13 +59,13 @@ var $singleLineEditor = function(el) {
var AcePopup = function(parentNode) {
var el = dom.createElement("div");
var popup = new $singleLineEditor(el);
if (parentNode)
parentNode.appendChild(el);
el.style.display = "none";
popup.renderer.content.style.cursor = "default";
popup.renderer.setStyle("ace_autocomplete");
popup.setOption("displayIndentGuides", false);
var noop = function(){};
@ -86,8 +86,7 @@ var AcePopup = function(parentNode) {
popup.on("mousedown", function(e) {
var pos = e.getDocumentPosition();
popup.moveCursorToPosition(pos);
popup.selection.clearSelection();
popup.selection.moveToPosition(pos);
selectionMarker.start.row = selectionMarker.end.row = pos.row;
e.stop();
});
@ -155,11 +154,11 @@ var AcePopup = function(parentNode) {
popup.getHoveredRow = function() {
return hoverMarker.start.row;
};
event.addListener(popup.container, "mouseout", hideHoverMarker);
popup.on("hide", hideHoverMarker);
popup.on("changeSelection", hideHoverMarker);
popup.session.doc.getLength = function() {
return popup.data.length;
};
@ -203,7 +202,7 @@ var AcePopup = function(parentNode) {
};
bgTokenizer.$updateOnChange = noop;
bgTokenizer.start = noop;
popup.session.$computeWidth = function() {
return this.screenWidth = 0;
}
@ -211,7 +210,7 @@ var AcePopup = function(parentNode) {
// public
popup.isOpen = false;
popup.isTopdown = false;
popup.data = [];
popup.setData = function(list) {
popup.data = list || [];
@ -236,7 +235,7 @@ var AcePopup = function(parentNode) {
popup._signal("select");
}
};
popup.on("changeSelection", function() {
if (popup.isOpen)
popup.setRow(popup.selection.lead.row);
@ -268,22 +267,22 @@ var AcePopup = function(parentNode) {
el.style.display = "";
this.renderer.$textLayer.checkForSizeChanges();
var left = pos.left;
if (left + el.offsetWidth > screenWidth)
left = screenWidth - el.offsetWidth;
el.style.left = left + "px";
this._signal("show");
lastMouseEvent = null;
popup.isOpen = true;
};
popup.getTextLeftOffset = function() {
return this.$borderSize + this.renderer.$padding + this.$imageSize;
};
popup.$imageSize = 0;
popup.$borderSize = 1;
@ -291,19 +290,24 @@ var AcePopup = function(parentNode) {
};
dom.importCssString("\
.ace_autocomplete.ace-tm .ace_marker-layer .ace_active-line {\
.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\
background-color: #CAD6FA;\
z-index: 1;\
}\
.ace_autocomplete.ace-tm .ace_line-hover {\
.ace_editor.ace_autocomplete .ace_line-hover {\
border: 1px solid #abbffe;\
margin-top: -1px;\
background: rgba(233,233,253,0.4);\
}\
.ace_autocomplete .ace_line-hover {\
.ace_editor.ace_autocomplete .ace_line-hover {\
position: absolute;\
z-index: 2;\
}\
.ace_editor.ace_autocomplete .ace_scroller {\
background: none;\
border: none;\
box-shadow: none;\
}\
.ace_rightAlignedText {\
color: gray;\
display: inline-block;\
@ -312,11 +316,11 @@ dom.importCssString("\
text-align: right;\
z-index: -1;\
}\
.ace_autocomplete .ace_completion-highlight{\
.ace_editor.ace_autocomplete .ace_completion-highlight{\
color: #000;\
text-shadow: 0 0 0.01em;\
}\
.ace_autocomplete {\
.ace_editor.ace_autocomplete {\
width: 280px;\
z-index: 200000;\
background: #fbfbfb;\

View file

@ -29,7 +29,7 @@
* ***** END LICENSE BLOCK ***** */
define(function(require, exports, module) {
var Range = require("ace/range").Range;
var Range = require("../range").Range;
var splitRegex = /[^a-zA-Z_0-9\$\-]+/;
@ -75,4 +75,4 @@ define(function(require, exports, module) {
};
}));
};
});
});

View file

@ -94,14 +94,14 @@ exports.iSearchCommands = [{
}, {
name: "extendSearchTerm",
exec: function(iSearch, string) {
iSearch.addChar(string);
iSearch.addString(string);
},
readOnly: true,
isIncrementalSearchCommand: true
}, {
name: "extendSearchTermSpace",
bindKey: "space",
exec: function(iSearch) { iSearch.addChar(' '); },
exec: function(iSearch) { iSearch.addString(' '); },
readOnly: true,
isIncrementalSearchCommand: true
}, {
@ -134,6 +134,34 @@ exports.iSearchCommands = [{
},
readOnly: true,
isIncrementalSearchCommand: true
}, {
name: "yankNextWord",
bindKey: "Ctrl-w",
exec: function(iSearch) {
var ed = iSearch.$editor,
range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorWordRight(); }),
string = ed.session.getTextRange(range);
iSearch.addString(string);
},
readOnly: true,
isIncrementalSearchCommand: true
}, {
name: "yankNextChar",
bindKey: "Ctrl-Alt-y",
exec: function(iSearch) {
var ed = iSearch.$editor,
range = ed.selection.getRangeOfMovements(function(sel) { sel.moveCursorRight(); }),
string = ed.session.getTextRange(range);
iSearch.addString(string);
},
readOnly: true,
isIncrementalSearchCommand: true
}, {
name: 'recenterTopBottom',
bindKey: 'Ctrl-l',
exec: function(iSearch) { iSearch.$editor.execCommand('recenterTopBottom'); },
readOnly: true,
isIncrementalSearchCommand: true
}];
function IncrementalSearchKeyboardHandler(iSearch) {
@ -163,6 +191,8 @@ oop.inherits(IncrementalSearchKeyboardHandler, HashHandler);
var handleKeyboard$super = this.handleKeyboard;
this.handleKeyboard = function(data, hashId, key, keyCode) {
if (((hashId === 1/*ctrl*/ || hashId === 8/*command*/) && key === 'v')
|| (hashId === 1/*ctrl*/ && key === 'y')) return null;
var cmd = handleKeyboard$super.call(this, data, hashId, key, keyCode);
if (cmd.command) { return cmd; }
if (hashId == -1) {

View file

@ -144,8 +144,8 @@ exports.loadModule = function(moduleName, onLoad) {
// initialization
exports.init = function() {
options.packaged = require.packaged || module.packaged || (global.define && define.packaged);
function init(packaged) {
options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged);
if (!global.document)
return "";
@ -190,6 +190,8 @@ exports.init = function() {
exports.set(key, scriptOptions[key]);
};
exports.init = init;
function deHyphenate(str) {
return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); });
}

View file

@ -121,6 +121,7 @@ var Document = function(textOrLines) {
this.$detectNewLine = function(text) {
var match = text.match(/^.*?(\r\n|\r|\n)/m);
this.$autoNewLine = match ? match[1] : "\n";
this._signal("changeNewLineMode");
};
/**
@ -137,11 +138,11 @@ var Document = function(textOrLines) {
case "unix":
return "\n";
default:
return this.$autoNewLine;
return this.$autoNewLine || "\n";
}
};
this.$autoNewLine = "\n";
this.$autoNewLine = "";
this.$newLineMode = "auto";
/**
* [Sets the new line mode.]{: #Document.setNewLineMode.desc}
@ -153,6 +154,7 @@ var Document = function(textOrLines) {
return;
this.$newLineMode = newLineMode;
this._signal("changeNewLineMode");
};
/**

View file

@ -281,13 +281,13 @@ var EditSession = function(text, mode) {
**/
this.setValue = function(text) {
this.doc.setValue(text);
this.selection.moveCursorTo(0, 0);
this.selection.clearSelection();
this.selection.moveTo(0, 0);
this.$resetRowCache(0);
this.$deltas = [];
this.$deltasDoc = [];
this.$deltasFold = [];
this.setUndoManager(this.$undoManager);
this.getUndoManager().reset();
};
@ -412,7 +412,7 @@ var EditSession = function(text, mode) {
}
self.mergeUndoDeltas = false;
self.$deltas = [];
}
};
this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);
}
};
@ -470,7 +470,7 @@ var EditSession = function(text, mode) {
* @param {Number} tabSize The new tab size
**/
this.setTabSize = function(tabSize) {
this.setOption("tabSize", tabSize)
this.setOption("tabSize", tabSize);
};
/**
* Returns the current tab size.
@ -486,7 +486,7 @@ var EditSession = function(text, mode) {
*
**/
this.isTabStop = function(position) {
return this.$useSoftTabs && (position.column % this.$tabSize == 0);
return this.$useSoftTabs && (position.column % this.$tabSize === 0);
};
this.$overwrite = false;
@ -500,7 +500,7 @@ var EditSession = function(text, mode) {
*
**/
this.setOverwrite = function(overwrite) {
this.setOption("overwrite", overwrite)
this.setOption("overwrite", overwrite);
};
/**
@ -622,14 +622,14 @@ var EditSession = function(text, mode) {
clazz : clazz,
inFront: !!inFront,
id: id
}
};
if (inFront) {
this.$frontMarkers[id] = marker;
this._signal("changeFrontMarker")
this._signal("changeFrontMarker");
} else {
this.$backMarkers[id] = marker;
this._signal("changeBackMarker")
this._signal("changeBackMarker");
}
return id;
@ -652,10 +652,10 @@ var EditSession = function(text, mode) {
if (inFront) {
this.$frontMarkers[id] = marker;
this._signal("changeFrontMarker")
this._signal("changeFrontMarker");
} else {
this.$backMarkers[id] = marker;
this._signal("changeBackMarker")
this._signal("changeBackMarker");
}
return marker;
@ -696,7 +696,7 @@ var EditSession = function(text, mode) {
this.$searchHighlight = this.addDynamicMarker(highlight);
}
this.$searchHighlight.setRegexp(re);
}
};
// experimental
this.highlightLines = function(startRow, endRow, clazz, inFront) {
@ -1043,14 +1043,14 @@ var EditSession = function(text, mode) {
};
this.getLineWidgetMaxWidth = function() {
if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth
if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth;
var width = 0;
this.lineWidgets.forEach(function(w) {
if (w && w.screenWidth > width)
width = w.screenWidth;
});
return this.lineWidgetWidth = width;
}
};
this.$computeWidth = function(force) {
if (this.$modified || force) {
@ -1278,7 +1278,7 @@ var EditSession = function(text, mode) {
// Check if this range and the last undo range has something in common.
// If true, merge the ranges.
if (lastUndoRange != null) {
if (Range.comparePoints(lastUndoRange.start, range.start) == 0) {
if (Range.comparePoints(lastUndoRange.start, range.start) === 0) {
lastUndoRange.start.column += range.end.column - range.start.column;
lastUndoRange.end.column += range.end.column - range.start.column;
}
@ -1562,10 +1562,7 @@ var EditSession = function(text, mode) {
// If wrapMode is activaed, the wrapData array has to be initialized.
if (useWrapMode) {
var len = this.getLength();
this.$wrapData = [];
for (var i = 0; i < len; i++) {
this.$wrapData.push([]);
}
this.$wrapData = Array(len);
this.$updateWrapData(0, len - 1);
}
@ -1714,16 +1711,10 @@ var EditSession = function(text, mode) {
lastRow = firstRow;
} else {
var args;
if (useWrapMode) {
args = [firstRow, 0];
for (var i = 0; i < len; i++) args.push([]);
this.$wrapData.splice.apply(this.$wrapData, args);
} else {
args = Array(len);
args.unshift(firstRow, 0);
this.$rowLengthCache.splice.apply(this.$rowLengthCache, args);
}
var args = Array(len);
args.unshift(firstRow, 0);
var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache
arr.splice.apply(arr, args);
// If some new line is added inside of a foldLine, then split
// the fold line up.
@ -1828,8 +1819,7 @@ var EditSession = function(text, mode) {
lines[foldLine.end.row].length + 1
);
wrapData[foldLine.start.row]
= this.$computeWrapSplits(tokens, wrapLimit, tabSize);
wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);
row = foldLine.end.row + 1;
}
}
@ -2018,9 +2008,6 @@ var EditSession = function(text, mode) {
* The first position indicates the number of columns for `str` on screen.<br/>
* The second value contains the position of the document column that this function read until.
*
*
*
*
**/
this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) {
if (maxScreenColumn == 0)
@ -2321,14 +2308,16 @@ var EditSession = function(text, mode) {
// Clamp textLine if in wrapMode.
if (this.$useWrapMode) {
var wrapRow = this.$wrapData[foldStartRow];
var screenRowOffset = 0;
while (textLine.length >= wrapRow[screenRowOffset]) {
screenRow ++;
screenRowOffset++;
if (wrapRow) {
var screenRowOffset = 0;
while (textLine.length >= wrapRow[screenRowOffset]) {
screenRow ++;
screenRowOffset++;
}
textLine = textLine.substring(
wrapRow[screenRowOffset - 1] || 0, textLine.length
);
}
textLine = textLine.substring(
wrapRow[screenRowOffset - 1] || 0, textLine.length
);
}
return {
@ -2382,7 +2371,8 @@ var EditSession = function(text, mode) {
var foldStart = fold ? fold.start.row :Infinity;
while (row < lastRow) {
screenRows += this.$wrapData[row].length + 1;
var splits = this.$wrapData[row];
screenRows += splits ? splits.length + 1 : 1;
row ++;
if (row > foldStart) {
row = fold.end.row+1;
@ -2398,14 +2388,17 @@ var EditSession = function(text, mode) {
return screenRows;
};
// For every keystroke this gets called once per char in the whole doc!!
// Wouldn't hurt to make it a bit faster for c >= 0x1100
/**
* @private
*
*/
this.$setFontMetrics = function(fm) {
// todo
}
// For every keystroke this gets called once per char in the whole doc!!
// Wouldn't hurt to make it a bit faster for c >= 0x1100
function isFullWidth(c) {
if (c < 0x1100)
return false;

View file

@ -289,14 +289,13 @@ var Editor = function(renderer, session) {
* Sets a new editsession to use. This method also emits the `'changeSession'` event.
* @param {EditSession} session The new session to use
*
*
**/
this.setSession = function(session) {
if (this.session == session)
return;
if (this.session) {
var oldSession = this.session;
var oldSession = this.session;
if (oldSession) {
this.session.removeEventListener("change", this.$onDocumentChange);
this.session.removeEventListener("changeMode", this.$onChangeMode);
this.session.removeEventListener("tokenizerUpdate", this.$onTokenizerUpdate);
@ -318,76 +317,80 @@ var Editor = function(renderer, session) {
}
this.session = session;
this.$onDocumentChange = this.onDocumentChange.bind(this);
session.addEventListener("change", this.$onDocumentChange);
this.renderer.setSession(session);
this.$onChangeMode = this.onChangeMode.bind(this);
session.addEventListener("changeMode", this.$onChangeMode);
this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);
session.addEventListener("tokenizerUpdate", this.$onTokenizerUpdate);
this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);
session.addEventListener("changeTabSize", this.$onChangeTabSize);
this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);
session.addEventListener("changeWrapLimit", this.$onChangeWrapLimit);
this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);
session.addEventListener("changeWrapMode", this.$onChangeWrapMode);
this.$onChangeFold = this.onChangeFold.bind(this);
session.addEventListener("changeFold", this.$onChangeFold);
this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);
this.session.addEventListener("changeFrontMarker", this.$onChangeFrontMarker);
this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);
this.session.addEventListener("changeBackMarker", this.$onChangeBackMarker);
this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);
this.session.addEventListener("changeBreakpoint", this.$onChangeBreakpoint);
this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);
this.session.addEventListener("changeAnnotation", this.$onChangeAnnotation);
this.$onCursorChange = this.onCursorChange.bind(this);
this.session.addEventListener("changeOverwrite", this.$onCursorChange);
this.$onScrollTopChange = this.onScrollTopChange.bind(this);
this.session.addEventListener("changeScrollTop", this.$onScrollTopChange);
this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);
this.session.addEventListener("changeScrollLeft", this.$onScrollLeftChange);
this.selection = session.getSelection();
this.selection.addEventListener("changeCursor", this.$onCursorChange);
this.$onSelectionChange = this.onSelectionChange.bind(this);
this.selection.addEventListener("changeSelection", this.$onSelectionChange);
this.onChangeMode();
this.$blockScrolling += 1;
this.onCursorChange();
this.$blockScrolling -= 1;
this.onScrollTopChange();
this.onScrollLeftChange();
this.onSelectionChange();
this.onChangeFrontMarker();
this.onChangeBackMarker();
this.onChangeBreakpoint();
this.onChangeAnnotation();
this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();
this.renderer.updateFull();
if (session) {
this.$onDocumentChange = this.onDocumentChange.bind(this);
session.addEventListener("change", this.$onDocumentChange);
this.renderer.setSession(session);
this.$onChangeMode = this.onChangeMode.bind(this);
session.addEventListener("changeMode", this.$onChangeMode);
this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);
session.addEventListener("tokenizerUpdate", this.$onTokenizerUpdate);
this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);
session.addEventListener("changeTabSize", this.$onChangeTabSize);
this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);
session.addEventListener("changeWrapLimit", this.$onChangeWrapLimit);
this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);
session.addEventListener("changeWrapMode", this.$onChangeWrapMode);
this.$onChangeFold = this.onChangeFold.bind(this);
session.addEventListener("changeFold", this.$onChangeFold);
this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);
this.session.addEventListener("changeFrontMarker", this.$onChangeFrontMarker);
this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);
this.session.addEventListener("changeBackMarker", this.$onChangeBackMarker);
this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);
this.session.addEventListener("changeBreakpoint", this.$onChangeBreakpoint);
this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);
this.session.addEventListener("changeAnnotation", this.$onChangeAnnotation);
this.$onCursorChange = this.onCursorChange.bind(this);
this.session.addEventListener("changeOverwrite", this.$onCursorChange);
this.$onScrollTopChange = this.onScrollTopChange.bind(this);
this.session.addEventListener("changeScrollTop", this.$onScrollTopChange);
this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);
this.session.addEventListener("changeScrollLeft", this.$onScrollLeftChange);
this.selection = session.getSelection();
this.selection.addEventListener("changeCursor", this.$onCursorChange);
this.$onSelectionChange = this.onSelectionChange.bind(this);
this.selection.addEventListener("changeSelection", this.$onSelectionChange);
this.onChangeMode();
this.$blockScrolling += 1;
this.onCursorChange();
this.$blockScrolling -= 1;
this.onScrollTopChange();
this.onScrollLeftChange();
this.onSelectionChange();
this.onChangeFrontMarker();
this.onChangeBackMarker();
this.onChangeBreakpoint();
this.onChangeAnnotation();
this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();
this.renderer.updateFull();
}
this._signal("changeSession", {
session: session,
oldSession: oldSession
});
oldSession && oldSession._signal("changeEditor", {oldEditor: this});
session && session._signal("changeEditor", {editor: this});
};
/**
@ -452,11 +455,10 @@ var Editor = function(renderer, session) {
/**
* {:VirtualRenderer.setTheme}
* @param {String} theme The path to a theme
*
*
* @param {Function} cb optional callback called when theme is loaded
**/
this.setTheme = function(theme) {
this.renderer.setTheme(theme);
this.setTheme = function(theme, cb) {
this.renderer.setTheme(theme, cb);
};
/**
@ -654,7 +656,7 @@ var Editor = function(renderer, session) {
if (this.$highlightActiveLine) {
if ((this.$selectionStyle != "line" || !this.selection.isMultiLine()))
highlight = this.getCursorPosition();
if (this.renderer.$maxLines && this.session.getLength() === 1)
if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))
highlight = false;
}
@ -840,14 +842,13 @@ var Editor = function(renderer, session) {
* Inserts `text` into wherever the cursor is pointing.
* @param {String} text The new text to add
*
*
**/
this.insert = function(text) {
this.insert = function(text, pasted) {
var session = this.session;
var mode = session.getMode();
var cursor = this.getCursorPosition();
if (this.getBehavioursEnabled()) {
if (this.getBehavioursEnabled() && !pasted) {
// Get a transform if the current mode wants one.
var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);
if (transform) {
@ -1928,8 +1929,7 @@ var Editor = function(renderer, session) {
else
this.selection.selectTo(pos.row, pos.column);
} else {
this.clearSelection();
this.moveCursorTo(pos.row, pos.column);
this.selection.moveTo(pos.row, pos.column);
}
}
};
@ -1964,8 +1964,7 @@ var Editor = function(renderer, session) {
* @related Editor.moveCursorTo
**/
this.navigateTo = function(row, column) {
this.clearSelection();
this.moveCursorTo(row, column);
this.selection.moveTo(row, column);
};
/**
@ -1980,8 +1979,7 @@ var Editor = function(renderer, session) {
return this.moveCursorToPosition(selectionStart);
}
this.selection.clearSelection();
times = times || 1;
this.selection.moveCursorBy(-times, 0);
this.selection.moveCursorBy(-times || -1, 0);
};
/**
@ -1996,8 +1994,7 @@ var Editor = function(renderer, session) {
return this.moveCursorToPosition(selectionEnd);
}
this.selection.clearSelection();
times = times || 1;
this.selection.moveCursorBy(times, 0);
this.selection.moveCursorBy(times || 1, 0);
};
/**
@ -2141,8 +2138,7 @@ var Editor = function(renderer, session) {
this.$blockScrolling += 1;
var selection = this.getSelectionRange();
this.clearSelection();
this.selection.moveCursorTo(0, 0);
this.selection.moveTo(0, 0);
for (var i = ranges.length - 1; i >= 0; --i) {
if(this.$tryReplace(ranges[i], replacement)) {

57
lib/ace/ext/beautify.js Normal file
View file

@ -0,0 +1,57 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2012, 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 ***** */
// [WIP]
define(function(require, exports, module) {
"use strict";
var TokenIterator = require("ace/token_iterator").TokenIterator;
var phpTransform = require("./beautify/php_rules").transform;
exports.beautify = function(session) {
var iterator = new TokenIterator(session, 0, 0);
var token = iterator.getCurrentToken();
var context = session.$modeId.split("/").pop();
var code = phpTransform(iterator, context);
session.doc.setValue(code);
};
exports.commands = [{
name: "beautify",
exec: function(editor) {
exports.beautify(editor.session);
},
bindKey: "Ctrl-Shift-B"
}]
});

View file

@ -0,0 +1,366 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2012, 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 TokenIterator = require("ace/token_iterator").TokenIterator;
exports.newLines = [{
type: 'support.php_tag',
value: '<?php'
}, {
type: 'support.php_tag',
value: '<?'
}, {
type: 'support.php_tag',
value: '?>'
}, {
type: 'paren.lparen',
value: '{',
indent: true
}, {
type: 'paren.rparen',
breakBefore: true,
value: '}',
indent: false
}, {
type: 'paren.rparen',
breakBefore: true,
value: '})',
indent: false,
dontBreak: true
}, {
type: 'comment'
}, {
type: 'text',
value: ';'
}, {
type: 'text',
value: ':',
context: 'php'
}, {
type: 'keyword',
value: 'case',
indent: true,
dontBreak: true
}, {
type: 'keyword',
value: 'default',
indent: true,
dontBreak: true
}, {
type: 'keyword',
value: 'break',
indent: false,
dontBreak: true
}, {
type: 'punctuation.doctype.end',
value: '>'
}, {
type: 'meta.tag.punctuation.end',
value: '>'
}, {
type: 'meta.tag.punctuation.begin',
value: '<',
blockTag: true,
indent: true,
dontBreak: true
}, {
type: 'meta.tag.punctuation.begin',
value: '</',
indent: false,
breakBefore: true,
dontBreak: true
}, {
type: 'punctuation.operator',
value: ';'
}];
exports.spaces = [{
type: 'xml-pe',
prepend: true
},{
type: 'entity.other.attribute-name',
prepend: true
}, {
type: 'storage.type',
value: 'var',
append: true
}, {
type: 'storage.type',
value: 'function',
append: true
}, {
type: 'keyword.operator',
value: '='
}, {
type: 'keyword',
value: 'as',
prepend: true,
append: true
}, {
type: 'keyword',
value: 'function',
append: true
}, {
type: 'support.function',
next: /[^\(]/,
append: true
}, {
type: 'keyword',
value: 'or',
append: true,
prepend: true
}, {
type: 'keyword',
value: 'and',
append: true,
prepend: true
}, {
type: 'keyword',
value: 'case',
append: true
}, {
type: 'keyword.operator',
value: '||',
append: true,
prepend: true
}, {
type: 'keyword.operator',
value: '&&',
append: true,
prepend: true
}];
exports.singleTags = ['!doctype','area','base','br','hr','input','img','link','meta'];
exports.transform = function(iterator, maxPos, context) {
var token = iterator.getCurrentToken();
var newLines = exports.newLines;
var spaces = exports.spaces;
var singleTags = exports.singleTags;
var code = '';
var indentation = 0;
var dontBreak = false;
var tag;
var lastTag;
var lastToken = {};
var nextTag;
var nextToken = {};
var breakAdded = false;
var value = '';
while (token!==null) {
console.log(token);
if( !token ){
token = iterator.stepForward();
continue;
}
//change syntax
//php
if( token.type == 'support.php_tag' && token.value != '?>' ){
context = 'php';
}
else if( token.type == 'support.php_tag' && token.value == '?>' ){
context = 'html';
}
//css
else if( token.type == 'meta.tag.name.style' && context != 'css' ){
context = 'css';
}
else if( token.type == 'meta.tag.name.style' && context == 'css' ){
context = 'html';
}
//js
else if( token.type == 'meta.tag.name.script' && context != 'js' ){
context = 'js';
}
else if( token.type == 'meta.tag.name.script' && context == 'js' ){
context = 'html';
}
nextToken = iterator.stepForward();
//tag name
if (nextToken && nextToken.type.indexOf('meta.tag.name') == 0) {
nextTag = nextToken.value;
}
//don't linebreak
if ( lastToken.type == 'support.php_tag' && lastToken.value == '<?=') {
dontBreak = true;
}
//lowercase
if (token.type == 'meta.tag.name') {
token.value = token.value.toLowerCase();
}
//trim spaces
if (token.type == 'text') {
token.value = token.value.trim();
}
//skip empty tokens
if (!token.value) {
token = nextToken;
continue;
}
//put spaces back in
value = token.value;
for (var i in spaces) {
if (
token.type == spaces[i].type &&
(!spaces[i].value || token.value == spaces[i].value) &&
(
nextToken &&
(!spaces[i].next || spaces[i].next.test(nextToken.value))
)
) {
if (spaces[i].prepend) {
value = ' ' + token.value;
}
if (spaces[i].append) {
value += ' ';
}
}
}
//tag name
if (token.type.indexOf('meta.tag.name') == 0) {
tag = token.value;
//console.log(tag);
}
//new line before
breakAdded = false;
//outdent
for (i in newLines) {
if (
token.type == newLines[i].type &&
(
!newLines[i].value ||
token.value == newLines[i].value
) &&
(
!newLines[i].blockTag ||
singleTags.indexOf(nextTag) === -1
) &&
(
!newLines[i].context ||
newLines[i].context === context
)
) {
if (newLines[i].indent === false) {
indentation--;
}
if (
newLines[i].breakBefore &&
( !newLines[i].prev || newLines[i].prev.test(lastToken.value) )
) {
code += "\n";
breakAdded = true;
//indent
for (i = 0; i < indentation; i++) {
code += "\t";
}
}
break;
}
}
if (dontBreak===false) {
for (i in newLines) {
if (
lastToken.type == newLines[i].type &&
(
!newLines[i].value || lastToken.value == newLines[i].value
) &&
(
!newLines[i].blockTag ||
singleTags.indexOf(tag) === -1
) &&
(
!newLines[i].context ||
newLines[i].context === context
)
) {
if (newLines[i].indent === true) {
indentation++;
}
if (!newLines[i].dontBreak && !breakAdded) {
code += "\n";
//indent
for (i = 0; i < indentation; i++) {
code += "\t";
}
}
break;
}
}
}
code += value;
//linebreaks back on after end short php tag
if ( lastToken.type == 'support.php_tag' && lastToken.value == '?>' ) {
dontBreak = false;
}
//next token
lastTag = tag;
lastToken = token;
token = nextToken;
if (token===null) {
break;
}
}
return code;
};
});

View file

@ -130,8 +130,7 @@ AceEmmetEditor.prototype = {
*/
setCaretPos: function(index){
var pos = this.ace.indexToPosition(index);
this.ace.clearSelection();
this.ace.selection.moveCursorToPosition(pos);
this.ace.selection.moveToPosition(pos);
},
/**

View file

@ -122,8 +122,7 @@ exports.showErrorMarker = function(editor, dir) {
};
}
editor.session.unfold(pos.row);
editor.selection.moveCursorToPosition(pos);
editor.selection.clearSelection();
editor.selection.moveToPosition(pos);
var w = {
row: pos.row,
@ -143,12 +142,12 @@ exports.showErrorMarker = function(editor, dir) {
el.className = "error_widget " + gutterAnno.className;
el.innerHTML = gutterAnno.text.join("<br>");
var kb = {
handleKeyboard:function(_,hashId, keyString) {
if (hashId === 0 && keyString === "esc") {
w.destroy();
return true;
}
el.appendChild(dom.createElement("div"));
var kb = function(_, hashId, keyString) {
if (hashId === 0 && (keyString === "esc" || keyString === "return")) {
w.destroy();
return {command: "null"};
}
};

View file

@ -34,6 +34,7 @@ define(function(require, exports, module) {
var snippetManager = require("../snippets").snippetManager;
var Autocomplete = require("../autocomplete").Autocomplete;
var config = require("../config");
var util = require("../autocomplete/util");
var textCompleter = require("../autocomplete/text_completer");
var keyWordCompleter = {
@ -114,6 +115,58 @@ var loadSnippetFile = function(id) {
});
};
var doLiveAutocomplete = function(e) {
var editor = e.editor;
var session = editor.getSession();
var pos = editor.getCursorPosition();
var line = session.getLine(pos.row);
var hasCompleter = (editor.completer && editor.completer.activated);
var text = e.args || "";
// Is the user entering text
// we only want to automatically show the autocomplete dialog
// whenever the user is typing in text not pasting, deleting, ...
var typing = (e.command.name === "insertstring" && text.length === 1);
// We don't want to autocomplete with no prefix
if(
e.command.name === 'backspace' &&
util.retrievePrecedingIdentifier(line, pos.column) === ''
) {
if(hasCompleter) editor.completer.detach();
return;
}
// we don't want to autocomplete on paste events
if(!typing) {
return;
}
// The prefix to autocomplete for
var prefix = util.retrievePrecedingIdentifier(line, pos.column);
// Only autocomplete if there's a prefix that can be matched
if(prefix !== '' && !(hasCompleter)) {
if (!editor.completer) {
// Create new autocompleter
editor.completer = new Autocomplete();
// Disable autoInsert
editor.completer.autoInsert = false;
}
editor.completer.showPopup(editor);
// needed for firefox on mac
editor.completer.cancelContextMenu();
} else if(prefix === '' && hasCompleter) {
// When the prefix is empty
// close the autocomplete dialog
editor.completer.detach();
}
};
var Editor = require("../editor").Editor;
require("../config").defineOptions(Editor.prototype, "editor", {
enableBasicAutocompletion: {
@ -127,6 +180,17 @@ require("../config").defineOptions(Editor.prototype, "editor", {
},
value: false
},
enableLiveAutocomplete: {
set: function(val) {
if (val) {
// On each change automatically trigger the autocomplete
this.commands.on('afterExec', doLiveAutocomplete);
} else {
this.commands.removeListener('afterExec', doLiveAutocomplete);
}
},
value: false
},
enableSnippets: {
set: function(val) {
if (val) {

View file

@ -68,6 +68,7 @@ var supportedModes = {
EJS: ["ejs"],
Forth: ["frt|fs|ldr"],
FTL: ["ftl"],
Gherkin: ["feature"],
Glsl: ["glsl|frag|vert"],
golang: ["go"],
Groovy: ["groovy"],

View file

@ -72,6 +72,8 @@ oop.inherits(IncrementalSearch, Search);
this.$options.needle = '';
this.$options.backwards = backwards;
ed.keyBinding.addKeyboardHandler(this.$keyboardHandler);
// we need to completely intercept paste, just registering an event handler does not work
this.$originalEditorOnPaste = ed.onPaste; ed.onPaste = this.onPaste.bind(this);
this.$mousedownHandler = ed.addEventListener('mousedown', this.onMouseDown.bind(this));
this.selectionFix(ed);
this.statusMessage(true);
@ -79,11 +81,13 @@ oop.inherits(IncrementalSearch, Search);
this.deactivate = function(reset) {
this.cancelSearch(reset);
this.$editor.keyBinding.removeKeyboardHandler(this.$keyboardHandler);
var ed = this.$editor;
ed.keyBinding.removeKeyboardHandler(this.$keyboardHandler);
if (this.$mousedownHandler) {
this.$editor.removeEventListener('mousedown', this.$mousedownHandler);
ed.removeEventListener('mousedown', this.$mousedownHandler);
delete this.$mousedownHandler;
}
ed.onPaste = this.$originalEditorOnPaste;
this.message('');
}
@ -150,9 +154,9 @@ oop.inherits(IncrementalSearch, Search);
return found;
}
this.addChar = function(c) {
this.addString = function(s) {
return this.highlightAndFindWithNeedle(false, function(needle) {
return needle + c;
return needle + s;
});
}
@ -181,6 +185,10 @@ oop.inherits(IncrementalSearch, Search);
return true;
}
this.onPaste = function(text) {
this.addString(text);
}
this.statusMessage = function(found) {
var options = this.$options, msg = '';
msg += options.backwards ? 'reverse-' : '';

View file

@ -95,17 +95,17 @@ module.exports = {
"test: find simple text incrementally" : function() {
iSearch.activate(editor);
var range = iSearch.addChar('1'), // "1"
var range = iSearch.addString('1'), // "1"
highlightRanges = callHighlighterUpdate(editor.session);
testRanges("Range: [0/3] -> [0/4]", [range], "range");
testRanges("Range: [0/3] -> [0/4],Range: [1/3] -> [1/4]", highlightRanges, "highlight");
range = iSearch.addChar('2'); // "12"
range = iSearch.addString('2'); // "12"
highlightRanges = callHighlighterUpdate(editor.session);
testRanges("Range: [0/3] -> [0/5]", [range], "range");
testRanges("Range: [0/3] -> [0/5],Range: [1/3] -> [1/5]", highlightRanges, "highlight");
range = iSearch.addChar('3'); // "123"
range = iSearch.addString('3'); // "123"
highlightRanges = callHighlighterUpdate(editor.session);
testRanges("Range: [0/3] -> [0/6]", [range], "range");
testRanges("Range: [0/3] -> [0/6]", highlightRanges, "highlight");
@ -118,7 +118,7 @@ module.exports = {
"test: forward / backward" : function() {
iSearch.activate(editor);
iSearch.addChar('1'); iSearch.addChar('2');
iSearch.addString('1'); iSearch.addString('2');
var range = iSearch.next();
testRanges("Range: [1/3] -> [1/5]", [range], "range");
@ -131,18 +131,18 @@ module.exports = {
"test: cancelSearch" : function() {
iSearch.activate(editor);
iSearch.addChar('1'); iSearch.addChar('2');
iSearch.addString('1'); iSearch.addString('2');
var range = iSearch.cancelSearch(true);
testRanges("Range: [0/0] -> [0/0]", [range], "range");
iSearch.addChar('1'); range = iSearch.addChar('2');
iSearch.addString('1'); range = iSearch.addString('2');
testRanges("Range: [0/3] -> [0/5]", [range], "range");
},
"test: failing search keeps pos" : function() {
iSearch.activate(editor);
iSearch.addChar('1'); iSearch.addChar('2');
var range = iSearch.addChar('x');
iSearch.addString('1'); iSearch.addString('2');
var range = iSearch.addString('x');
testRanges("", [range], "range");
assert.position(editor.getCursorPosition(), 0, 5);
},
@ -150,14 +150,14 @@ module.exports = {
"test: backwards search" : function() {
editor.moveCursorTo(1,0);
iSearch.activate(editor, true);
iSearch.addChar('1'); var range = iSearch.addChar('2');;
iSearch.addString('1'); var range = iSearch.addString('2');;
testRanges("Range: [0/5] -> [0/3]", [range], "range");
assert.position(editor.getCursorPosition(), 0, 3);
},
"test: forwards then backwards, same result, reoriented range" : function() {
iSearch.activate(editor);
iSearch.addChar('1'); var range = iSearch.addChar('2');;
iSearch.addString('1'); var range = iSearch.addString('2');;
testRanges("Range: [0/3] -> [0/5]", [range], "range");
assert.position(editor.getCursorPosition(), 0, 5);
@ -168,7 +168,7 @@ module.exports = {
"test: reuse prev search via option" : function() {
iSearch.activate(editor);
iSearch.addChar('1'); iSearch.addChar('2');;
iSearch.addString('1'); iSearch.addString('2');;
assert.position(editor.getCursorPosition(), 0, 5);
iSearch.deactivate();
@ -179,14 +179,14 @@ module.exports = {
"test: don't extend selection range if selection is empty" : function() {
iSearch.activate(editor);
iSearch.addChar('1'); iSearch.addChar('2');;
iSearch.addString('1'); iSearch.addString('2');;
testRanges("Range: [0/5] -> [0/5]", [editor.getSelectionRange()], "sel range");
},
"test: extend selection range if selection exists" : function() {
iSearch.activate(editor);
editor.selection.selectTo(0, 1);
iSearch.addChar('1'); iSearch.addChar('2');;
iSearch.addString('1'); iSearch.addString('2');;
testRanges("Range: [0/0] -> [0/5]", [editor.getSelectionRange()], "sel range");
},
@ -195,7 +195,7 @@ module.exports = {
editor.keyBinding.addKeyboardHandler(emacs.handler);
emacs.handler.commands.setMark.exec(editor);
iSearch.activate(editor);
iSearch.addChar('1'); iSearch.addChar('2');;
iSearch.addString('1'); iSearch.addString('2');;
testRanges("Range: [0/0] -> [0/5]", [editor.getSelectionRange()], "sel range");
}

View file

@ -219,6 +219,10 @@ exports.handler.bindKey = function(key, command) {
};
exports.handler.handleKeyboard = function(data, hashId, key, keyCode) {
// if keyCode == -1 a non-printable key was pressed, such as just
// control. Handling those is currently not supported in this handler
if (keyCode === -1) return undefined;
var editor = data.editor;
// insertstring data.count times
if (hashId == -1) {

View file

@ -145,8 +145,8 @@ exports.handler = {
if (hashId == -1 || hashId == 1 || hashId === 0 && key.length > 1) {
if (cmds.inputBuffer.idle && startCommands[key])
return startCommands[key];
cmds.inputBuffer.push(editor, key);
return {command: "null", passEvent: false};
var isHandled = cmds.inputBuffer.push(editor, key);
return {command: "null", passEvent: !isHandled};
} // if no modifier || shift: wait for input.
else if (key.length == 1 && (hashId === 0 || hashId == 4)) {
return {command: "null", passEvent: true};

View file

@ -201,8 +201,7 @@ var actions = exports.actions = {
//editor.selection.selectLine();
//editor.selection.selectLeft();
var row = editor.getCursorPosition().row;
editor.selection.clearSelection();
editor.selection.moveCursorTo(row, 0);
editor.selection.moveTo(row, 0);
editor.selection.selectLineEnd();
editor.selection.visualLineStart = row;
@ -582,13 +581,11 @@ var handleCursorMove = exports.onCursorMove = function(editor, e) {
var cursorRow = editor.getCursorPosition().row;
if(originRow <= cursorRow) {
var endLine = editor.session.getLine(cursorRow);
editor.selection.clearSelection();
editor.selection.moveCursorTo(originRow, 0);
editor.selection.moveTo(originRow, 0);
editor.selection.selectTo(cursorRow, endLine.length);
} else {
var endLine = editor.session.getLine(originRow);
editor.selection.clearSelection();
editor.selection.moveCursorTo(originRow, endLine.length);
editor.selection.moveTo(originRow, endLine.length);
editor.selection.selectTo(cursorRow, 0);
}
}

View file

@ -53,8 +53,7 @@ function Motion(m) {
var a = getPos(editor, range, count, param, false);
if (!a)
return;
editor.clearSelection();
editor.moveCursorTo(a.row, a.column);
editor.selection.moveTo(a.row, a.column);
};
m.sel = function(editor, range, count, param) {
var a = getPos(editor, range, count, param, true);

View file

@ -122,13 +122,11 @@ module.exports = {
},
copyLine: function(editor) {
var pos = editor.getCursorPosition();
editor.selection.clearSelection();
editor.moveCursorTo(pos.row, pos.column);
editor.selection.moveTo(pos.row, pos.column);
editor.selection.selectLine();
registers._default.isLine = true;
registers._default.text = editor.getCopyText().replace(/\n$/, "");
editor.selection.clearSelection();
editor.moveCursorTo(pos.row, pos.column);
editor.selection.moveTo(pos.row, pos.column);
}
};
});

View file

@ -190,7 +190,7 @@ var Cursor = function(parentEl) {
for (var i = 0, n = selections.length; i < n; i++) {
var pixelPos = this.getPixelPosition(selections[i].cursor, true);
if ((pixelPos.top > config.height + config.offset ||
pixelPos.top < -config.offset) && i > 1) {
pixelPos.top < 0) && i > 1) {
continue;
}

View file

@ -0,0 +1,158 @@
/* ***** 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) {
var oop = require("../lib/oop");
var dom = require("../lib/dom");
var lang = require("../lib/lang");
var EventEmitter = require("../lib/event_emitter").EventEmitter;
var CHAR_COUNT = 0;
var FontMetrics = exports.FontMetrics = function(parentEl, interval) {
this.el = dom.createElement("div");
this.$setMeasureNodeStyles(this.el.style, true);
this.$main = dom.createElement("div");
this.$setMeasureNodeStyles(this.$main.style);
this.$measureNode = dom.createElement("div");
this.$setMeasureNodeStyles(this.$measureNode.style);
this.el.appendChild(this.$main);
this.el.appendChild(this.$measureNode);
parentEl.appendChild(this.el);
if (!CHAR_COUNT)
this.$testFractionalRect();
this.$measureNode.textContent = lang.stringRepeat("X", CHAR_COUNT);
this.$characterSize = {width: 0, height: 0};
this.checkForSizeChanges();
};
(function() {
oop.implement(this, EventEmitter);
this.$characterSize = {width: 0, height: 0};
this.$testFractionalRect = function() {
var el = dom.createElement("div");
this.$setMeasureNodeStyles(el.style);
el.style.width = "0.2px";
document.documentElement.appendChild(el);
var w = el.getBoundingClientRect().width;
if (w > 0 && w < 1)
CHAR_COUNT = 1;
else
CHAR_COUNT = 100;
el.parentNode.removeChild(el);
};
this.$setMeasureNodeStyles = function(style, isRoot) {
style.width = style.height = "auto";
style.left = style.top = "-100px";
style.visibility = "hidden";
style.position = "fixed";
style.whiteSpace = "pre";
style.font = "inherit";
style.overflow = isRoot ? "hidden" : "visible";
};
this.checkForSizeChanges = function() {
var size = this.$measureSizes();
if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {
this.$measureNode.style.fontWeight = "bold";
var boldSize = this.$measureSizes();
this.$measureNode.style.fontWeight = "";
this.$characterSize = size;
this.charSizes = Object.create(null);
this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;
this._emit("changeCharacterSize", {data: size});
}
};
this.$pollSizeChanges = function() {
if (this.$pollSizeChangesTimer)
return this.$pollSizeChangesTimer;
var self = this;
return this.$pollSizeChangesTimer = setInterval(function() {
self.checkForSizeChanges();
}, 500);
};
this.setPolling = function(val) {
if (val) {
this.$pollSizeChanges();
} else {
if (this.$pollSizeChangesTimer)
this.$pollSizeChangesTimer;
}
};
this.$measureSizes = function() {
var rect = this.$measureNode.getBoundingClientRect();
var size = {
height: rect.height,
width: rect.width / CHAR_COUNT
};
// Size and width can be null if the editor is not visible or
// detached from the document
if (size.width === 0 || size.height === 0)
return null;
return size;
};
this.$measureCharWidth = function(ch) {
this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);
var rect = this.$main.getBoundingClientRect();
return rect.width / CHAR_COUNT;
};
this.getCharacterWidth = function(ch) {
var w = this.charSizes[ch];
if (w === undefined) {
this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;
}
return w;
};
this.destroy = function() {
clearInterval(this.$pollSizeChangesTimer);
if (this.el && this.el.parentNode)
this.el.parentNode.removeChild(this.el);
};
}).call(FontMetrics.prototype);
});

View file

@ -119,7 +119,8 @@ var Gutter = function(parentEl) {
this.update = function(config) {
var session = this.session;
var firstRow = config.firstRow;
var lastRow = Math.min(config.lastRow + 1, session.getLength() - 1); // needed to compensate
var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar
session.getLength() - 1);
var fold = session.getNextFoldLine(firstRow);
var foldStart = fold ? fold.start.row : Infinity;
var foldWidgets = this.$showFoldWidgets && session.foldWidgets;

View file

@ -41,154 +41,58 @@ var Text = function(parentEl) {
this.element = dom.createElement("div");
this.element.className = "ace_layer ace_text-layer";
parentEl.appendChild(this.element);
this.$characterSize = {width: 0, height: 0};
this.checkForSizeChanges();
this.$pollSizeChanges();
this.$updateEolChar = this.$updateEolChar.bind(this);
};
(function() {
oop.implement(this, EventEmitter);
this.EOF_CHAR = "\xB6"; //"&para;";
this.EOL_CHAR = "\xAC"; //"&not;";
this.TAB_CHAR = "\u2192"; //"&rarr;" "\u21E5";
this.SPACE_CHAR = "\xB7"; //"&middot;";
this.EOF_CHAR = "\xB6";
this.EOL_CHAR_LF = "\xAC";
this.EOL_CHAR_CRLF = "\xa4";
this.EOL_CHAR = this.EOL_CHAR_LF;
this.TAB_CHAR = "\u2192"; //"\u21E5";
this.SPACE_CHAR = "\xB7";
this.$padding = 0;
this.$updateEolChar = function() {
var EOL_CHAR = this.session.doc.getNewLineCharacter() == "\n"
? this.EOL_CHAR_LF
: this.EOL_CHAR_CRLF;
if (this.EOL_CHAR != EOL_CHAR) {
this.EOL_CHAR = EOL_CHAR;
return true;
}
}
this.setPadding = function(padding) {
this.$padding = padding;
this.element.style.padding = "0 " + padding + "px";
};
this.getLineHeight = function() {
return this.$characterSize.height || 0;
return this.$fontMetrics.$characterSize.height || 0;
};
this.getCharacterWidth = function() {
return this.$characterSize.width || 0;
return this.$fontMetrics.$characterSize.width || 0;
};
this.$setFontMetrics = function(measure) {
this.$fontMetrics = measure;
this.$fontMetrics.on("changeCharacterSize", function(e) {
this._signal("changeCharacterSize", e);
}.bind(this));
this.$pollSizeChanges();
}
this.checkForSizeChanges = function() {
var size = this.$measureSizes();
if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {
this.$measureNode.style.fontWeight = "bold";
var boldSize = this.$measureSizes();
this.$measureNode.style.fontWeight = "";
this.$characterSize = size;
this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;
this._emit("changeCharacterSize", {data: size});
}
this.$fontMetrics.checkForSizeChanges();
};
this.$pollSizeChanges = function() {
var self = this;
this.$pollSizeChangesTimer = setInterval(function() {
self.checkForSizeChanges();
}, 500);
return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();
};
this.$fontStyles = {
fontFamily : 1,
fontSize : 1,
fontWeight : 1,
fontStyle : 1,
lineHeight : 1
};
this.$measureSizes = useragent.isIE || useragent.isOldGecko ? function() {
var n = 1000;
if (!this.$measureNode) {
var measureNode = this.$measureNode = dom.createElement("div");
var style = measureNode.style;
style.width = style.height = "auto";
style.left = style.top = (-n * 40) + "px";
style.visibility = "hidden";
style.position = "fixed";
style.overflow = "visible";
style.whiteSpace = "nowrap";
// in FF 3.6 monospace fonts can have a fixed sub pixel width.
// that's why we have to measure many characters
// Note: characterWidth can be a float!
measureNode.innerHTML = lang.stringRepeat("Xy", n);
if (this.element.ownerDocument.body) {
this.element.ownerDocument.body.appendChild(measureNode);
} else {
var container = this.element.parentNode;
while (!dom.hasCssClass(container, "ace_editor"))
container = container.parentNode;
container.appendChild(measureNode);
}
}
// Size and width can be null if the editor is not visible or
// detached from the document
if (!this.element.offsetWidth)
return null;
var style = this.$measureNode.style;
var computedStyle = dom.computedStyle(this.element);
for (var prop in this.$fontStyles)
style[prop] = computedStyle[prop];
var size = {
height: this.$measureNode.offsetHeight,
width: this.$measureNode.offsetWidth / (n * 2)
};
// Size and width can be null if the editor is not visible or
// detached from the document
if (size.width == 0 || size.height == 0)
return null;
return size;
}
: function() {
if (!this.$measureNode) {
var measureNode = this.$measureNode = dom.createElement("div");
var style = measureNode.style;
style.width = style.height = "auto";
style.left = style.top = -100 + "px";
style.visibility = "hidden";
style.position = "fixed";
style.overflow = "visible";
style.whiteSpace = "nowrap";
// fixes fractional fixed-width fonts; see http://git.io/CavZNw
measureNode.innerHTML = lang.stringRepeat("X", 100);
var container = this.element.parentNode;
while (container && !dom.hasCssClass(container, "ace_editor"))
container = container.parentNode;
if (!container)
return this.$measureNode = null;
container.appendChild(measureNode);
}
var rect = this.$measureNode.getBoundingClientRect();
var size = {
height: rect.height,
width: rect.width / 100
};
// Size and width can be null if the editor is not visible or
// detached from the document
if (size.width == 0 || size.height == 0)
return null;
return size;
};
this.setSession = function(session) {
this.session = session;
this.$computeTabString();
@ -222,7 +126,7 @@ var Text = function(parentEl) {
var tabStr = this.$tabStrings = [0];
for (var i = 1; i < tabSize + 1; i++) {
if (this.showInvisibles) {
tabStr.push("<span class='ace_invisible'>"
tabStr.push("<span class='ace_invisible ace_invisible_tab'>"
+ this.TAB_CHAR
+ lang.stringRepeat("\xa0", i - 1)
+ "</span>");
@ -233,8 +137,12 @@ var Text = function(parentEl) {
if (this.displayIndentGuides) {
this.$indentGuideRe = /\s\S| \t|\t |\s$/;
var className = "ace_indent-guide";
var spaceClass = "";
var tabClass = "";
if (this.showInvisibles) {
className += " ace_invisible";
spaceClass = " ace_invisible_space";
tabClass = " ace_invisible_tab";
var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize);
var tabContent = this.TAB_CHAR + lang.stringRepeat("\xa0", this.tabSize - 1);
} else{
@ -242,8 +150,8 @@ var Text = function(parentEl) {
var tabContent = spaceContent;
}
this.$tabStrings[" "] = "<span class='" + className + "'>" + spaceContent + "</span>";
this.$tabStrings["\t"] = "<span class='" + className + "'>" + tabContent + "</span>";
this.$tabStrings[" "] = "<span class='" + className + spaceClass + "'>" + spaceContent + "</span>";
this.$tabStrings["\t"] = "<span class='" + className + tabClass + "'>" + tabContent + "</span>";
}
};
@ -417,7 +325,7 @@ var Text = function(parentEl) {
var replaceFunc = function(c, a, b, tabIdx, idx4) {
if (a) {
return self.showInvisibles ?
"<span class='ace_invisible'>" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "</span>" :
"<span class='ace_invisible ace_invisible_space'>" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "</span>" :
lang.stringRepeat("\xa0", c.length);
} else if (c == "&") {
return "&#38;";
@ -429,14 +337,14 @@ var Text = function(parentEl) {
return self.$tabStrings[tabSize];
} else if (c == "\u3000") {
// U+3000 is both invisible AND full-width, so must be handled uniquely
var classToUse = self.showInvisibles ? "ace_cjk ace_invisible" : "ace_cjk";
var classToUse = self.showInvisibles ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk";
var space = self.showInvisibles ? self.SPACE_CHAR : "";
screenColumn += 1;
return "<span class='" + classToUse + "' style='width:" +
(self.config.characterWidth * 2) +
"px'>" + space + "</span>";
} else if (b) {
return "<span class='ace_invisible ace_invalid'>" + self.SPACE_CHAR + "</span>";
return "<span class='ace_invisible ace_invisible_space ace_invalid'>" + self.SPACE_CHAR + "</span>";
} else {
screenColumn += 1;
return "<span class='ace_cjk' style='width:" +
@ -573,7 +481,7 @@ var Text = function(parentEl) {
row = foldLine.end.row
stringBuilder.push(
"<span class='ace_invisible'>",
"<span class='ace_invisible ace_invisible_eol'>",
row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR,
"</span>"
);

View file

@ -81,14 +81,14 @@ module.exports = {
this.textLayer.$renderLine(stringBuilder, 0, true);
assert.equal(
stringBuilder.join(""),
"<span class='ace_cjk ace_invisible' style='width:20px'>" + this.textLayer.SPACE_CHAR + "</span>"
+ "<span class='ace_invisible'>\xB6</span>"
"<span class='ace_cjk ace_invisible ace_invisible_space' style='width:20px'>" + this.textLayer.SPACE_CHAR + "</span>"
+ "<span class='ace_invisible ace_invisible_eol'>\xB6</span>"
);
},
"test rendering of indent guides" : function() {
"test rendering of indent guides" : function() {
var textLayer = this.textLayer
var EOL = "<span class='ace_invisible'>" + textLayer.EOL_CHAR + "</span>";
var EOL = "<span class='ace_invisible ace_invisible_eol'>" + textLayer.EOL_CHAR + "</span>";
var SPACE = function(i) {return Array(i+1).join("\xa0")}
var DOT = function(i) {return Array(i+1).join(textLayer.SPACE_CHAR)}
var TAB = function(i) {return textLayer.TAB_CHAR + SPACE(i-1)}
@ -108,13 +108,13 @@ module.exports = {
]);
this.textLayer.setShowInvisibles(true);
testRender([
"<span class='ace_indent-guide ace_invisible'>" + DOT(4) + "</span><span class='ace_invisible'>" + DOT(2) + "</span>" + EOL,
"<span class='ace_indent-guide ace_invisible'>" + TAB(4) + "</span><span class='ace_invisible'>" + TAB(4) + "</span><span class='ace_identifier'>f</span>" + EOL,
"<span class='ace_indent-guide ace_invisible ace_invisible_space'>" + DOT(4) + "</span><span class='ace_invisible ace_invisible_space'>" + DOT(2) + "</span>" + EOL,
"<span class='ace_indent-guide ace_invisible ace_invisible_tab'>" + TAB(4) + "</span><span class='ace_invisible ace_invisible_tab'>" + TAB(4) + "</span><span class='ace_identifier'>f</span>" + EOL,
]);
this.textLayer.setDisplayIndentGuides(false);
testRender([
"<span class='ace_invisible'>" + DOT(6) + "</span>" + EOL,
"<span class='ace_invisible'>" + TAB(4) + "</span><span class='ace_invisible'>" + TAB(4) + "</span><span class='ace_identifier'>f</span>" + EOL
"<span class='ace_invisible ace_invisible_space'>" + DOT(6) + "</span>" + EOL,
"<span class='ace_invisible ace_invisible_tab'>" + TAB(4) + "</span><span class='ace_invisible ace_invisible_tab'>" + TAB(4) + "</span><span class='ace_identifier'>f</span>" + EOL
]);
}
};

View file

@ -33,7 +33,6 @@ define(function(require, exports, module) {
var keys = require("./keys");
var useragent = require("./useragent");
var dom = require("./dom");
exports.addListener = function(elem, type, callback) {
if (elem.addEventListener) {
@ -170,7 +169,7 @@ exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbac
};
exports.addListener(el, "mousedown", function(e) {
if (exports.getButton(e) != 0) {
if (exports.getButton(e) !== 0) {
clicks = 0;
} else if (e.detail > 1) {
clicks++;
@ -210,22 +209,27 @@ exports.addMultiMouseDownListener = function(el, timeouts, eventHandler, callbac
}
};
function normalizeCommandKeys(callback, e, keyCode) {
var hashId = 0;
if ((useragent.isOpera && !("KeyboardEvent" in window)) && useragent.isMac) {
hashId = 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0)
| (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);
} else {
hashId = 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0)
| (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);
var getModifierHash = useragent.isMac && useragent.isOpera && !("KeyboardEvent" in window)
? function(e) {
return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0);
}
: function(e) {
return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);
};
exports.getModifierString = function(e) {
return keys.KEY_MODS[getModifierHash(e)];
};
function normalizeCommandKeys(callback, e, keyCode) {
var hashId = getModifierHash(e);
if (!useragent.isMac && pressedKeys) {
if (pressedKeys[91] || pressedKeys[92])
hashId |= 8;
if (pressedKeys.altGr) {
if ((3 & hashId) != 3)
pressedKeys.altGr = 0
pressedKeys.altGr = 0;
else
return;
}
@ -267,12 +271,11 @@ function normalizeCommandKeys(callback, e, keyCode) {
if (!hashId && keyCode === 13) {
if (e.location || e.keyLocation === 3) {
callback(e, hashId, -keyCode)
callback(e, hashId, -keyCode);
if (e.defaultPrevented)
return;
}
}
// If there is no hashId and the keyCode is not a function key, then
// we don't call the callback as we don't handle a command key here
@ -281,8 +284,6 @@ function normalizeCommandKeys(callback, e, keyCode) {
return false;
}
return callback(e, hashId, keyCode);
}

View file

@ -102,8 +102,8 @@ var Keys = (function() {
73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o',
80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v',
87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.',
188: ',', 190: '.', 191: '/', 192: '`', 219: '[', 220: '\\',
221: ']', 222: '\''
187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', 219: '[',
220: '\\',221: ']', 222: '\'',
}
};
@ -130,16 +130,25 @@ var Keys = (function() {
ret.enter = ret["return"];
ret.escape = ret.esc;
ret.del = ret["delete"];
// workaround for firefox bug
ret[173] = '-';
(function() {
var mods = ["cmd", "ctrl", "alt", "shift"];
for (var i = Math.pow(2, mods.length); i--;) {
ret.KEY_MODS[i] = mods.filter(function(x) {
return i & ret.KEY_MODS[x];
}).join("-") + "-";
}
})();
return ret;
})();
oop.mixin(exports, Keys);
exports.keyCodeToString = function(keyCode) {
return (Keys[keyCode] || String.fromCharCode(keyCode)).toLowerCase();
}
};
});

View file

@ -38,4 +38,14 @@ exports.loadScript = function(path, callback) {
};
};
/*
* Convert a url into a fully qualified absolute URL
* This function does not work in IE6
*/
exports.qualifyURL = function(url) {
var a = document.createElement('a');
a.href = url;
return a.href;
}
});

View file

@ -76,7 +76,7 @@ exports.isLinux = (os == "linux");
// Windows Store JavaScript apps (aka Metro apps written in HTML5 and JavaScript) do not use the "Microsoft Internet Explorer" string in their user agent, but "MSAppHost" instead.
exports.isIE =
(navigator.appName == "Microsoft Internet Explorer" || navigator.appName.indexOf("MSAppHost") >= 0)
&& parseFloat(navigator.userAgent.match(/MSIE ([0-9]+[\.0-9]+)/)[1]);
&& parseFloat(navigator.userAgent.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:|MSIE )([0-9]+[\.0-9]+)/)[1]);
exports.isOldIE = exports.isIE && exports.isIE < 9;

View file

@ -46,7 +46,7 @@ function generateTestData() {
var tokenizer = new Mode().getTokenizer();
var state = "start";
var data = text.split(/\n|\r|\r\n/).map(function(line) {
var data = text.split(/\r\n|\r|\n/).map(function(line) {
var data = tokenizer.getLineTokens(line, state);
var tmp = [];
tmp.push(JSON.stringify(data.state));

View file

@ -1,26 +1,26 @@
[[
"start",
["comment","<!--- hello world --->"]
["comment.xml","<!--- hello world --->"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","cfset"],
["text"," "],
["entity.other.attribute-name","welcome"],
["keyword.operator.separator","="],
["string","\"Hello World!\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","cfset"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","welcome"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"Hello World!\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","cfoutput"],
["meta.tag.punctuation.end",">"],
["text","#welcome#"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","cfoutput"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","cfoutput"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","#welcome#"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","cfoutput"],
["meta.tag.punctuation.tag-close.xml",">"]
]]

View file

@ -1,56 +1,56 @@
[[
"start",
["text","tokenize Curly template"],
["text.xml","tokenize Curly template"],
["variable","{{"],
["text","test"],
["variable","}}"]
],[
"start",
["text","tokenize embedded script"]
["text.xml","tokenize embedded script"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name.script","script"],
["text"," "],
["entity.other.attribute-name","a"],
["keyword.operator.separator","="],
["string","'a'"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.script.tag-name.xml","script"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","a"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","'a'"],
["meta.tag.punctuation.tag-close.xml",">"],
["storage.type","var"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.script","script"],
["meta.tag.punctuation.end",">"],
["text","'123'"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.script.tag-name.xml","script"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","'123'"]
],[
"start",
["text","tokenize multiline attribute value with double quotes"]
["text.xml","tokenize multiline attribute value with double quotes"]
],[
["qqstring_inner","start_tag_stuff"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\"abc{{xyz}}"]
["string.attribute-value.xml0","tag_stuff"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"abc{{xyz}}"]
],[
"start",
["string","def\""],
["meta.tag.punctuation.end",">"]
["string.attribute-value.xml","def\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","tokenize multiline attribute value with single quotes"]
["text.xml","tokenize multiline attribute value with single quotes"]
],[
["qstring_inner","start_tag_stuff"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","'abc"]
["string.attribute-value.xml","tag_stuff"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","'abc"]
],[
"start",
["string","def\\\"'"],
["meta.tag.punctuation.end",">"]
["string.attribute-value.xml","def\\\"'"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
]]

View file

@ -1,90 +1,90 @@
[[
"start",
["punctuation.doctype.begin","<!"],
["meta.tag.doctype","DOCTYPE"],
["text"," "],
["xml-pe","html"],
["punctuation.doctype.end",">"]
["xml-pe.doctype.xml","<!"],
["xml-pe.doctype.xml","DOCTYPE"],
["text.whitespace.xml"," "],
["xml-pe.xml","html"],
["xml-pe.doctype.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"],
["text","Cloud9 Rocks!"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Cloud9 Rocks!"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","table"],
["text"," "],
["entity.other.attribute-name","class"],
["keyword.operator.separator","="],
["string","\"table\""],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","table"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","class"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"table\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"],
["text","Name"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Name"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"],
["text","Size"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Size"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["markup.list.meta.tag","<%"],
["text"," "],
["keyword","if"],
@ -99,51 +99,51 @@
["markup.list.meta.tag","%>"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\"..\""],
["meta.tag.punctuation.end",">"],
["text",".."],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.anchor","a"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"..\""],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml",".."],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.anchor.tag-name.xml","a"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["markup.list.meta.tag","<%"],
["text"," "],
["paren.rparen","}"],
@ -151,7 +151,7 @@
["markup.list.meta.tag","%>"]
],[
"start",
["text"," "],
["text.xml"," "],
["markup.list.meta.tag","<%"],
["text"," "],
["identifier","entries"],
@ -168,25 +168,25 @@
["markup.list.meta.tag","%>"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","span"],
["text"," "],
["entity.other.attribute-name","class"],
["keyword.operator.separator","="],
["string","\"glyphicon "],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","span"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","class"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"glyphicon "],
["markup.list.meta.tag","<%="],
["text"," "],
["identifier","entry"],
@ -204,20 +204,20 @@
["text"," "],
["string","'file'"],
["markup.list.meta.tag","%>"],
["string","\""],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","span"],
["meta.tag.punctuation.end",">"]
["string.attribute-value.xml","\""],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","span"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\""],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\""],
["markup.list.meta.tag","<%="],
["text"," "],
["identifier","entry"],
@ -225,8 +225,8 @@
["identifier","name"],
["text"," "],
["markup.list.meta.tag","%>"],
["string","\""],
["meta.tag.punctuation.end",">"],
["string.attribute-value.xml","\""],
["meta.tag.punctuation.tag-close.xml",">"],
["markup.list.meta.tag","<%="],
["text"," "],
["identifier","entry"],
@ -234,21 +234,21 @@
["identifier","name"],
["text"," "],
["markup.list.meta.tag","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.anchor","a"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.anchor.tag-name.xml","a"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["markup.list.meta.tag","<%="],
["text"," "],
["identifier","entry"],
@ -256,18 +256,18 @@
["identifier","size"],
["text"," "],
["markup.list.meta.tag","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["markup.list.meta.tag","<%"],
["text"," "],
["paren.rparen","})"],
@ -275,22 +275,22 @@
["markup.list.meta.tag","%>"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","table"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","table"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
]]

View file

@ -43,110 +43,110 @@
"start"
],[
"start",
["punctuation.doctype.begin","<!"],
["meta.tag.doctype","DOCTYPE"],
["text"," "],
["xml-pe","html"],
["punctuation.doctype.end",">"]
["xml-pe.doctype.xml","<!"],
["xml-pe.doctype.xml","DOCTYPE"],
["text.whitespace.xml"," "],
["xml-pe.xml","html"],
["xml-pe.doctype.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","html"],
["text"," "],
["entity.other.attribute-name","lang"],
["keyword.operator.separator","="],
["string","\"en-us\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","html"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","lang"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"en-us\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","meta"],
["text"," "],
["entity.other.attribute-name","charset"],
["keyword.operator.separator","="],
["string","\"utf-8\""],
["text"," "],
["meta.tag.punctuation.end","/>"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","meta"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","charset"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"utf-8\""],
["text.tag-whitespace.xml"," "],
["meta.tag.punctuation.tag-close.xml","/>"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"],
["string.interpolated","${"],
["variable","title"],
["keyword.operator","!"],
["string","\"FreeMarker\""],
["string.interpolated","}"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h1"],
["meta.tag.punctuation.end",">"],
["text","Hello "],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h1"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Hello "],
["string.interpolated","${"],
["variable","name"],
["keyword.operator","!"],
["string","\"\""],
["string.interpolated","}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h1"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h1"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["text","Today is: "],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Today is: "],
["string.interpolated","${"],
["language.variable",".now"],
["support.function","?date"],
["string.interpolated","}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.function","<#assign"],
["text"," "],
["variable","x"],
@ -157,7 +157,7 @@
["keyword",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.function","<#if"],
["text"," "],
["variable","x"],
@ -174,7 +174,7 @@
["text"," "],
["constant.numeric","14"],
["keyword",">"],
["text","x equals 13: "],
["text.xml","x equals 13: "],
["string.interpolated","${"],
["variable","x"],
["string.interpolated","}"],
@ -182,16 +182,16 @@
["keyword",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","ul"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","ul"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.function","<#list"],
["text"," "],
["variable","items"],
@ -202,14 +202,14 @@
["keyword",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","li"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","li"],
["meta.tag.punctuation.tag-close.xml",">"],
["string.interpolated","${"],
["variable","item_index"],
["string.interpolated","}"],
["text",": "],
["text.xml",": "],
["string.interpolated","${"],
["variable","item.name"],
["keyword.operator","!"],
@ -223,26 +223,26 @@
["constant.numeric","0"],
["paren.rparen","]"],
["string.interpolated","}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","li"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","li"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.function","</#list"],
["keyword",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","ul"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","ul"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," User directive: "],
["text.xml"," User directive: "],
["keyword.other","<@lib.function"],
["text"," "],
["variable","attr1"],
@ -257,21 +257,21 @@
["keyword.operator","="],
["constant.numeric","-42.12"],
["keyword",">"],
["text","Test"],
["text.xml","Test"],
["keyword.other","</@lib.function"],
["keyword",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.other","<@anotherOne"],
["text"," "],
["keyword","/>"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.function","<#if"],
["text"," "],
["variable","variable"],
@ -279,10 +279,10 @@
["keyword",">"]
],[
"start",
["text"," Deprecated"]
["text.xml"," Deprecated"]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.function","<#elseif"],
["text"," "],
["variable","variable"],
@ -290,52 +290,52 @@
["keyword",">"]
],[
"start",
["text"," Better"]
["text.xml"," Better"]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.function","<#else"],
["keyword",">"]
],[
"start",
["text"," Default"]
["text.xml"," Default"]
],[
"start",
["text"," "],
["text.xml"," "],
["keyword.function","</#if"],
["keyword",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.image","img"],
["text"," "],
["entity.other.attribute-name","src"],
["keyword.operator.separator","="],
["string","\"images/"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.image.tag-name.xml","img"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","src"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"images/"],
["string.interpolated","${"],
["variable","user.id"],
["string.interpolated","}"],
["string",".png\""],
["text"," "],
["meta.tag.punctuation.end","/>"]
["string.attribute-value.xml",".png\""],
["text.tag-whitespace.xml"," "],
["meta.tag.punctuation.tag-close.xml","/>"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
]]

View file

@ -7,16 +7,16 @@
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"comments\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"comments\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["storage.type.start","{{#"],
["variable.parameter","each"],
["text"," "],
@ -24,58 +24,58 @@
["storage.type.end","}}"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\"/posts/"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"/posts/"],
["storage.type.start","{{"],
["text","../"],
["variable.parameter","permalink"],
["storage.type.end","}}"],
["string","#"],
["string.attribute-value.xml","#"],
["storage.type.start","{{"],
["variable.parameter","id"],
["storage.type.end","}}"],
["string","\""],
["meta.tag.punctuation.end",">"],
["string.attribute-value.xml","\""],
["meta.tag.punctuation.tag-close.xml",">"],
["storage.type.start","{{"],
["variable.parameter","title"],
["storage.type.end","}}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.anchor","a"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.anchor.tag-name.xml","a"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"],
["storage.type.start","{{"],
["variable.parameter","body"],
["storage.type.end","}}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["storage.type.start","{{/"],
["variable.parameter","each"],
["storage.type.end","}}"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
]]

View file

@ -1,51 +1,51 @@
[[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name.script","script"],
["text"," "],
["entity.other.attribute-name","a"],
["keyword.operator.separator","="],
["string","'a'"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.script.tag-name.xml","script"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","a"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","'a'"],
["meta.tag.punctuation.tag-close.xml",">"],
["storage.type","var"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.script","script"],
["meta.tag.punctuation.end",">"],
["text","'123'"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.script.tag-name.xml","script"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","'123'"]
],[
["qqstring_inner","start_tag_stuff"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\"abc"]
["string.attribute-value.xml0","tag_stuff"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"abc"]
],[
"start",
["string"," def\""],
["meta.tag.punctuation.end",">"]
["string.attribute-value.xml"," def\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
["qstring_inner","start_tag_stuff"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","'abc"]
["string.attribute-value.xml","tag_stuff"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","'abc"]
],[
"start",
["string","def\\'"],
["meta.tag.punctuation.end",">"]
["string.attribute-value.xml","def\\'"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
]]

View file

@ -1,82 +1,82 @@
[[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h1"],
["meta.tag.punctuation.end",">"],
["text","Listing Books"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h1"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h1"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Listing Books"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h1"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","table"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","table"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"],
["text","Title"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Title"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"],
["text","Summary"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Summary"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","th"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","th"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["support.ruby_tag","<%"],
@ -92,22 +92,22 @@
["support.ruby_tag","%>"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["comment.start.erb","<%#"],
["comment"," comment "],
["comment.end.erb","%>"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["support.ruby_tag","<%="],
["text"," "],
["identifier","book"],
@ -115,15 +115,15 @@
["identifier","title"],
["text"," "],
["support.ruby_tag","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["support.ruby_tag","<%="],
["text"," "],
["identifier","book"],
@ -131,15 +131,15 @@
["identifier","content"],
["text"," "],
["support.ruby_tag","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["support.ruby_tag","<%="],
["text"," "],
["support.function","link_to"],
@ -149,15 +149,15 @@
["identifier","book"],
["text"," "],
["support.ruby_tag","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["support.ruby_tag","<%="],
["text"," "],
["support.function","link_to"],
@ -170,15 +170,15 @@
["paren.rparen",")"],
["text"," "],
["support.ruby_tag","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"],
["support.ruby_tag","<%="],
["text"," "],
["support.function","link_to"],
@ -200,15 +200,15 @@
["constant.other.symbol.ruby",":delete"],
["text"," "],
["support.ruby_tag","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["support.ruby_tag","<%"],
@ -218,21 +218,21 @@
["support.ruby_tag","%>"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","table"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","table"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","br"],
["text"," "],
["meta.tag.punctuation.end","/>"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","br"],
["text.tag-whitespace.xml"," "],
["meta.tag.punctuation.tag-close.xml","/>"]
],[
"start",
["text"," "]
["text.xml"," "]
],[
"start",
["support.ruby_tag","<%="],

View file

@ -1,19 +1,19 @@
[[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"js-start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.script","script"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.script.tag-name.xml","script"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"js-start",
["text"," "],
@ -40,15 +40,15 @@
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.script","script"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.script.tag-name.xml","script"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"css-start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.style","style"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.style.tag-name.xml","style"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
["css-ruleset","css-start"],
["text"," "],
@ -69,20 +69,20 @@
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.style","style"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.style.tag-name.xml","style"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," Today's date: "],
["text.xml"," Today's date: "],
["meta.tag","<%"],
["keyword.operator","="],
["text"," "],
@ -103,13 +103,13 @@
["meta.tag","%>"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["meta.tag","<%"],
["keyword.operator","!"],
["text"," "],
@ -124,7 +124,7 @@
["meta.tag","%>"]
],[
"jsp-start",
["text"," "],
["text.xml"," "],
["meta.tag","<jsp:declaration>"]
],[
"jsp-start",
@ -145,11 +145,11 @@
"start"
],[
"start",
["text"," "],
["text.xml"," "],
["comment","<%-- This is JSP comment --%>"]
],[
"start",
["text"," "],
["text.xml"," "],
["meta.tag","<%@"],
["text"," "],
["identifier","directive"],
@ -163,161 +163,161 @@
"start"
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text","Select Languages:"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Select Languages:"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.form","form"],
["text"," "],
["entity.other.attribute-name","ACTION"],
["keyword.operator.separator","="],
["string","\"jspCheckBox.jsp\""],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.form.tag-name.xml","form"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","ACTION"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"jspCheckBox.jsp\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.form","input"],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator.separator","="],
["string","\"checkbox\""],
["text"," "],
["entity.other.attribute-name","name"],
["keyword.operator.separator","="],
["string","\"id\""],
["text"," "],
["entity.other.attribute-name","value"],
["keyword.operator.separator","="],
["string","\"Java\""],
["meta.tag.punctuation.end",">"],
["text"," Java"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","BR"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.form.tag-name.xml","input"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","type"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"checkbox\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","name"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"id\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","value"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"Java\""],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," Java"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","BR"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.form","input"],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator.separator","="],
["string","\"checkbox\""],
["text"," "],
["entity.other.attribute-name","name"],
["keyword.operator.separator","="],
["string","\"id\""],
["text"," "],
["entity.other.attribute-name","value"],
["keyword.operator.separator","="],
["string","\".NET\""],
["meta.tag.punctuation.end",">"],
["text"," .NET"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","BR"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.form.tag-name.xml","input"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","type"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"checkbox\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","name"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"id\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","value"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\".NET\""],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," .NET"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","BR"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.form","input"],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator.separator","="],
["string","\"checkbox\""],
["text"," "],
["entity.other.attribute-name","name"],
["keyword.operator.separator","="],
["string","\"id\""],
["text"," "],
["entity.other.attribute-name","value"],
["keyword.operator.separator","="],
["string","\"PHP\""],
["meta.tag.punctuation.end",">"],
["text"," PHP"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","BR"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.form.tag-name.xml","input"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","type"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"checkbox\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","name"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"id\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","value"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"PHP\""],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," PHP"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","BR"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.form","input"],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator.separator","="],
["string","\"checkbox\""],
["text"," "],
["entity.other.attribute-name","name"],
["keyword.operator.separator","="],
["string","\"id\""],
["text"," "],
["entity.other.attribute-name","value"],
["keyword.operator.separator","="],
["string","\"C/C++\""],
["meta.tag.punctuation.end",">"],
["text"," C/C++"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","BR"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.form.tag-name.xml","input"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","type"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"checkbox\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","name"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"id\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","value"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"C/C++\""],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," C/C++"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","BR"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.form","input"],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator.separator","="],
["string","\"checkbox\""],
["text"," "],
["entity.other.attribute-name","name"],
["keyword.operator.separator","="],
["string","\"id\""],
["text"," "],
["entity.other.attribute-name","value"],
["keyword.operator.separator","="],
["string","\"PERL\""],
["meta.tag.punctuation.end",">"],
["text"," PERL "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","BR"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.form.tag-name.xml","input"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","type"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"checkbox\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","name"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"id\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","value"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"PERL\""],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," PERL "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","BR"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.form","input"],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator.separator","="],
["string","\"submit\""],
["text"," "],
["entity.other.attribute-name","value"],
["keyword.operator.separator","="],
["string","\"Submit\""],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.form.tag-name.xml","input"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","type"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"submit\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","value"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"Submit\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.form","form"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.form.tag-name.xml","form"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"jsp-start",
["text"," "],
["text.xml"," "],
["meta.tag","<%"]
],[
"jsp-start",
@ -424,12 +424,12 @@
["meta.tag","%>"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
]]

View file

@ -1,56 +1,56 @@
[[
"start",
["text","The following examples can be found in full at http://liquidmarkup.org/"]
["text.xml","The following examples can be found in full at http://liquidmarkup.org/"]
],[
"start"
],[
"start",
["text","Liquid is an extraction from the e-commerce system Shopify."]
["text.xml","Liquid is an extraction from the e-commerce system Shopify."]
],[
"start",
["text","Shopify powers many thousands of e-commerce stores which all call for unique designs."]
["text.xml","Shopify powers many thousands of e-commerce stores which all call for unique designs."]
],[
"start",
["text","For this we developed Liquid which allows our customers complete design freedom while"]
["text.xml","For this we developed Liquid which allows our customers complete design freedom while"]
],[
"start",
["text","maintaining the integrity of our servers."]
["text.xml","maintaining the integrity of our servers."]
],[
"start"
],[
"start",
["text","Liquid has been in production use since June 2006 and is now used by many other"]
["text.xml","Liquid has been in production use since June 2006 and is now used by many other"]
],[
"start",
["text","hosted web applications."]
["text.xml","hosted web applications."]
],[
"start"
],[
"start",
["text","It was developed for usage in Ruby on Rails web applications and integrates seamlessly"]
["text.xml","It was developed for usage in Ruby on Rails web applications and integrates seamlessly"]
],[
"start",
["text","as a plugin but it also works excellently as a stand alone library."]
["text.xml","as a plugin but it also works excellently as a stand alone library."]
],[
"start"
],[
"start",
["text","Here's what it looks like:"]
["text.xml","Here's what it looks like:"]
],[
"start"
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","ul"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"products\""],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","ul"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"products\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","for"],
@ -64,16 +64,16 @@
["variable","%}"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","li"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","li"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["variable","{{"],
["text"," "],
["identifier","product"],
@ -81,12 +81,12 @@
["identifier","title"],
["text"," "],
["variable","}}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," Only "],
["text.xml"," Only "],
["variable","{{"],
["text"," "],
["identifier","product"],
@ -100,10 +100,10 @@
"start"
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["variable","{{"],
["text"," "],
["identifier","product"],
@ -117,20 +117,20 @@
["constant.numeric","200"],
["text"," "],
["variable","}}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","li"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","li"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","endfor"],
@ -138,34 +138,34 @@
["variable","%}"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","ul"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","ul"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start"
],[
"start",
["text","Some more features include:"]
["text.xml","Some more features include:"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text","Filters"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Filters"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["text"," The word \"tobi\" in uppercase: "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," The word \"tobi\" in uppercase: "],
["variable","{{"],
["text"," "],
["string","'tobi'"],
@ -173,16 +173,16 @@
["support.function","upcase"],
["text"," "],
["variable","}}"],
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["text","The word \"tobi\" has "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","The word \"tobi\" has "],
["variable","{{"],
["text"," "],
["string","'tobi'"],
@ -190,16 +190,16 @@
["support.function","size"],
["text"," "],
["variable","}}"],
["text"," letters! "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["text.xml"," letters! "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["text","Change \"Hello world\" to \"Hi world\": "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Change \"Hello world\" to \"Hi world\": "],
["variable","{{"],
["text"," "],
["string","'Hello world'"],
@ -211,16 +211,16 @@
["string","'Hi'"],
["text"," "],
["variable","}}"],
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["text","The date today is "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","The date today is "],
["variable","{{"],
["text"," "],
["string","'now'"],
@ -230,31 +230,31 @@
["string","\"%Y %b %d\""],
["text"," "],
["variable","}}"],
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text","If"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","If"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","if"],
@ -278,13 +278,13 @@
["string","'marc'"],
["text"," "],
["variable","%}"],
["text"," "]
["text.xml"," "]
],[
"start",
["text"," hi marc or tobi"]
["text.xml"," hi marc or tobi"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","endif"],
@ -292,30 +292,30 @@
["variable","%}"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text","Case"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Case"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","case"],
@ -325,7 +325,7 @@
["variable","%}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","when"],
@ -335,10 +335,10 @@
["variable","%}"]
],[
"start",
["text"," Welcome"]
["text.xml"," Welcome"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","when"],
@ -348,7 +348,7 @@
["variable","%}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{{"],
["text"," "],
["identifier","product"],
@ -358,7 +358,7 @@
["identifier","link_to_vendor"],
["text"," "],
["variable","}}"],
["text"," / "],
["text.xml"," / "],
["variable","{{"],
["text"," "],
["identifier","product"],
@ -368,7 +368,7 @@
["variable","}}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","else"],
@ -376,7 +376,7 @@
["variable","%}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{{"],
["text"," "],
["identifier","page_title"],
@ -384,7 +384,7 @@
["variable","}}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","endcase"],
@ -392,30 +392,30 @@
["variable","%}"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text","For Loops"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","For Loops"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","for"],
@ -427,10 +427,10 @@
["identifier","array"],
["text"," "],
["variable","%}"],
["text"," "]
["text.xml"," "]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{{"],
["text"," "],
["identifier","item"],
@ -438,7 +438,7 @@
["variable","}}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","endfor"],
@ -446,30 +446,30 @@
["variable","%}"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text","Tables"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Tables"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","tablerow"],
@ -487,7 +487,7 @@
["variable","%}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","if"],
@ -499,7 +499,7 @@
["variable","%}"]
],[
"start",
["text"," First column: "],
["text.xml"," First column: "],
["variable","{{"],
["text"," "],
["identifier","item"],
@ -509,7 +509,7 @@
["variable","}}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","else"],
@ -517,7 +517,7 @@
["variable","%}"]
],[
"start",
["text"," Different column: "],
["text.xml"," Different column: "],
["variable","{{"],
["text"," "],
["identifier","item"],
@ -527,7 +527,7 @@
["variable","}}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","endif"],
@ -535,7 +535,7 @@
["variable","%}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable","{%"],
["text"," "],
["keyword","endtablerow"],
@ -543,9 +543,9 @@
["variable","%}"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
]]

View file

@ -1,6 +1,6 @@
[[
"comment",
["comment.block.lsl","/*"]
["comment.block.begin.lsl","/*"]
],[
"comment",
["comment.block.lsl"," Testing syntax highlighting"]
@ -12,7 +12,7 @@
["comment.block.lsl"," for the Linden Scripting Language"]
],[
"start",
["comment.block.lsl","*/"]
["comment.block.end.lsl","*/"]
],[
"start"
],[
@ -51,14 +51,14 @@
"start",
["storage.type.lsl","integer"],
["text.lsl"," "],
["invalid.unimplemented.lsl","event"],
["invalid.illegal.lsl","event"],
["text.lsl"," "],
["keyword.operator.lsl","="],
["text.lsl"," "],
["constant.numeric.lsl","5673"],
["punctuation.operator.lsl",";"],
["text.lsl"," "],
["comment.line.double-slash.lsl","// unimplemented reserved keyword!"]
["comment.line.double-slash.lsl","// invalid.illegal"]
],[
"start"
],[
@ -368,14 +368,14 @@
],[
"start",
["text.lsl"," "],
["invalid.unimplemented.lsl","event"],
["invalid.illegal.lsl","event"],
["text.lsl"," "],
["keyword.operator.lsl","="],
["text.lsl"," "],
["constant.numeric.lsl","5673"],
["punctuation.operator.lsl",";"],
["text.lsl"," "],
["comment.line.double-slash.lsl","// unimplemented reserved keyword!"]
["comment.line.double-slash.lsl","// invalid.illegal"]
],[
"start"
],[
@ -401,13 +401,21 @@
],[
"start",
["text.lsl"," "],
["invalid.deprecated.lsl","llCloud"],
["reserved.godmode.lsl","llSetInventoryPermMask"],
["paren.lparen.lsl","("],
["constant.language.vector.lsl","ZERO_VECTOR"],
["string.quoted.double.lsl.start","\""],
["string.quoted.double.lsl","some item"],
["string.quoted.double.lsl.end","\""],
["punctuation.operator.lsl",","],
["text.lsl"," "],
["constant.language.integer.lsl","MASK_NEXT"],
["punctuation.operator.lsl",","],
["text.lsl"," "],
["constant.language.integer.lsl","PERM_ALL"],
["paren.rparen.lsl",")"],
["punctuation.operator.lsl",";"],
["text.lsl"," "],
["comment.line.double-slash.lsl","// invalid deprecated function!"]
["text.lsl"," "],
["comment.line.double-slash.lsl","// reserved.godmode"]
],[
"start"
],[
@ -420,9 +428,9 @@
["text.lsl"," "],
["string.quoted.double.lsl.start","\""],
["string.quoted.double.lsl","Leaving "],
["constant.language.escape.lsl","\\\""],
["constant.character.escape.lsl","\\\""],
["string.quoted.double.lsl","default"],
["constant.language.escape.lsl","\\\""],
["constant.character.escape.lsl","\\\""],
["string.quoted.double.lsl"," now..."],
["string.quoted.double.lsl.end","\""],
["paren.rparen.lsl",")"],
@ -467,13 +475,13 @@
["text.lsl"," "],
["string.quoted.double.lsl.start","\""],
["string.quoted.double.lsl","Entered "],
["constant.language.escape.lsl","\\\""],
["constant.character.escape.lsl","\\\""],
["string.quoted.double.lsl","state other"],
["constant.language.escape.lsl","\\\""],
["constant.character.escape.lsl","\\\""],
["string.quoted.double.lsl",", returning to "],
["constant.language.escape.lsl","\\\""],
["constant.character.escape.lsl","\\\""],
["string.quoted.double.lsl","default"],
["constant.language.escape.lsl","\\\""],
["constant.character.escape.lsl","\\\""],
["string.quoted.double.lsl"," again..."],
["string.quoted.double.lsl.end","\""],
["paren.rparen.lsl",")"],
@ -492,4 +500,4 @@
["paren.rparen.lsl","}"]
],[
"start"
]]
]]

View file

@ -1,24 +1,24 @@
[[
"doctype",
["text",""],
["punctuation.doctype.begin","<!"],
["meta.tag.doctype","DOCTYPE"],
["text"," "],
["xml-pe","html"],
["text"," "],
["xml-pe","PUBLIC"],
["text"," "],
["string","\"-//W3C//DTD XHTML 1.0 Strict//EN\""]
["text.xml",""],
["xml-pe.doctype.xml","<!"],
["xml-pe.doctype.xml","DOCTYPE"],
["text.whitespace.xml"," "],
["xml-pe.xml","html"],
["text.whitespace.xml"," "],
["xml-pe.xml","PUBLIC"],
["text.whitespace.xml"," "],
["string.xml","\"-//W3C//DTD XHTML 1.0 Strict//EN\""]
],[
"start",
["text"," "],
["string","\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\""],
["punctuation.doctype.end",">"]
["text.whitespace.xml"," "],
["string.xml","\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\""],
["xml-pe.doctype.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
["lua-bracketedComment",2,"lua-start"],
["keyword","<%"],
@ -37,32 +37,32 @@
["keyword","%>"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"],
["text","Reference"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Reference"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","link"],
["text"," "],
["entity.other.attribute-name","rel"],
["keyword.operator.separator","="],
["string","\"stylesheet\""],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\""],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","link"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","rel"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"stylesheet\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\""],
["keyword","<%="],
["identifier","luadoc"],
["text","."],
@ -75,129 +75,129 @@
["string","\"luadoc.css\""],
["paren.rparen",")"],
["keyword","%>"],
["string","\""],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator.separator","="],
["string","\"text/css\""],
["text"," "],
["meta.tag.punctuation.end","/>"]
["string.attribute-value.xml","\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","type"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"text/css\""],
["text.tag-whitespace.xml"," "],
["meta.tag.punctuation.tag-close.xml","/>"]
],[
"start",
["text","\t"],
["comment","<!--meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/-->"]
["text.xml","\t"],
["comment.xml","<!--meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/-->"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"container\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"container\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"product\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"product\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"product_logo\""],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"]
["text.xml","\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"product_logo\""],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"product_name\""],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","big"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","b"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","b"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","big"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"]
["text.xml","\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"product_name\""],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","big"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","b"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","b"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","big"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"product_description\""],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"]
["text.xml","\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"product_description\""],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"],
["text"," "],
["comment","<!-- id=\"product\" -->"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," "],
["comment.xml","<!-- id=\"product\" -->"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"main\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"main\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"navigation\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"navigation\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["keyword","<%="],
@ -223,22 +223,22 @@
"start"
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"],
["text"," "],
["comment","<!-- id=\"navigation\" -->"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," "],
["comment.xml","<!-- id=\"navigation\" -->"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"content\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"content\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
@ -267,25 +267,25 @@
["keyword","then%>"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text","Modules"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Modules"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","table"],
["text"," "],
["entity.other.attribute-name","class"],
["keyword.operator.separator","="],
["string","\"module_list\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","table"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","class"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"module_list\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["comment","<!--<tr><td colspan=\"2\">Modules</td></tr>-->"]
["comment.xml","<!--<tr><td colspan=\"2\">Modules</td></tr>-->"]
],[
"start",
["keyword","<%for"],
@ -306,26 +306,26 @@
["keyword","do%>"]
],[
"start",
["text","\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml","\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["text"," "],
["entity.other.attribute-name","class"],
["keyword.operator.separator","="],
["string","\"name\""],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\""],
["text.xml","\t\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","class"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"name\""],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\""],
["keyword","<%="],
["identifier","luadoc"],
["text","."],
@ -340,27 +340,27 @@
["identifier","doc"],
["paren.rparen",")"],
["keyword","%>"],
["string","\""],
["meta.tag.punctuation.end",">"],
["string.attribute-value.xml","\""],
["meta.tag.punctuation.tag-close.xml",">"],
["keyword","<%="],
["identifier","modulename"],
["keyword","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.anchor","a"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.anchor.tag-name.xml","a"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["text"," "],
["entity.other.attribute-name","class"],
["keyword.operator.separator","="],
["string","\"summary\""],
["meta.tag.punctuation.end",">"],
["text.xml","\t\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","class"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"summary\""],
["meta.tag.punctuation.tag-close.xml",">"],
["keyword","<%="],
["identifier","doc"],
["text","."],
@ -371,23 +371,23 @@
["text","."],
["identifier","summary"],
["keyword","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml","\t"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["keyword","<%end%>"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","table"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","table"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["keyword","<%end%>"]
@ -421,25 +421,25 @@
["keyword","then%>"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"],
["text","Files"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h2"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Files"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h2"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","table"],
["text"," "],
["entity.other.attribute-name","class"],
["keyword.operator.separator","="],
["string","\"file_list\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","table"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","class"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"file_list\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["comment","<!--<tr><td colspan=\"2\">Files</td></tr>-->"]
["comment.xml","<!--<tr><td colspan=\"2\">Files</td></tr>-->"]
],[
"start",
["keyword","<%for"],
@ -460,26 +460,26 @@
["keyword","do%>"]
],[
"start",
["text","\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml","\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["text"," "],
["entity.other.attribute-name","class"],
["keyword.operator.separator","="],
["string","\"name\""],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\""],
["text.xml","\t\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","class"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"name\""],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\""],
["keyword","<%="],
["identifier","luadoc"],
["text","."],
@ -492,44 +492,44 @@
["identifier","filepath"],
["paren.rparen",")"],
["keyword","%>"],
["string","\""],
["meta.tag.punctuation.end",">"],
["string.attribute-value.xml","\""],
["meta.tag.punctuation.tag-close.xml",">"],
["keyword","<%="],
["identifier","filepath"],
["keyword","%>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.anchor","a"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.anchor.tag-name.xml","a"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.table","td"],
["text"," "],
["entity.other.attribute-name","class"],
["keyword.operator.separator","="],
["string","\"summary\""],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","td"],
["meta.tag.punctuation.end",">"]
["text.xml","\t\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.table.tag-name.xml","td"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","class"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"summary\""],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","td"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","tr"],
["meta.tag.punctuation.end",">"]
["text.xml","\t"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","tr"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["keyword","<%end%>"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name.table","table"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.table.tag-name.xml","table"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["keyword","<%end%>"]
@ -537,97 +537,97 @@
"start"
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"],
["text"," "],
["comment","<!-- id=\"content\" -->"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," "],
["comment.xml","<!-- id=\"content\" -->"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"],
["text"," "],
["comment","<!-- id=\"main\" -->"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," "],
["comment.xml","<!-- id=\"main\" -->"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","div"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"about\""],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"about\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","\t"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\"http://validator.w3.org/check?uri=referer\""],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.image","img"],
["text"," "],
["entity.other.attribute-name","src"],
["keyword.operator.separator","="],
["string","\"http://www.w3.org/Icons/valid-xhtml10\""],
["text"," "],
["entity.other.attribute-name","alt"],
["keyword.operator.separator","="],
["string","\"Valid XHTML 1.0!\""],
["text"," "],
["entity.other.attribute-name","height"],
["keyword.operator.separator","="],
["string","\"31\""],
["text"," "],
["entity.other.attribute-name","width"],
["keyword.operator.separator","="],
["string","\"88\""],
["text"," "],
["meta.tag.punctuation.end","/>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.anchor","a"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["text.xml","\t"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"http://validator.w3.org/check?uri=referer\""],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.image.tag-name.xml","img"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","src"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"http://www.w3.org/Icons/valid-xhtml10\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","alt"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"Valid XHTML 1.0!\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","height"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"31\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","width"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"88\""],
["text.tag-whitespace.xml"," "],
["meta.tag.punctuation.tag-close.xml","/>"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.anchor.tag-name.xml","a"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"],
["text"," "],
["comment","<!-- id=\"about\" -->"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," "],
["comment.xml","<!-- id=\"about\" -->"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","div"],
["meta.tag.punctuation.end",">"],
["text"," "],
["comment","<!-- id=\"container\" -->"],
["text","\t"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," "],
["comment.xml","<!-- id=\"container\" -->"],
["text.xml","\t"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
]]

View file

@ -1,49 +1,49 @@
[[
"start",
["text","test: header 1 "]
["text.xml","test: header 1 "]
],[
"start",
["markup.heading.1","#"],
["heading","f"]
],[
"start",
["text","test: header 2"]
["text.xml","test: header 2"]
],[
"start",
["markup.heading.2","##"],
["heading"," foo"]
],[
"start",
["text","test: header ends with ' #'"]
["text.xml","test: header ends with ' #'"]
],[
"start",
["markup.heading.1","#"],
["heading"," # # "]
],[
"start",
["text","test: header ends with '#'"]
["text.xml","test: header ends with '#'"]
],[
"start",
["markup.heading.1","#"],
["heading","foo# "]
],[
"start",
["text","test: 6+ #s is not a valid header"]
["text.xml","test: 6+ #s is not a valid header"]
],[
"start",
["text","####### foo"]
["text.xml","####### foo"]
],[
"start",
["text","test: # followed be only space is not a valid header"]
["text.xml","test: # followed be only space is not a valid header"]
],[
"start",
["text","# "]
["text.xml","# "]
],[
"start",
["text","test: only space between #s is not a valid header"]
["text.xml","test: only space between #s is not a valid header"]
],[
"start",
["text","# #"]
["text.xml","# #"]
],[
"allowBlock"
],[
@ -99,14 +99,14 @@
"start"
],[
"start",
["text","in plain text "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","b"],
["meta.tag.punctuation.end",">"],
["text","http://ace.ajaxorg.com"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","b"],
["meta.tag.punctuation.end",">"]
["text.xml","in plain text "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","b"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","http://ace.ajaxorg.com"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","b"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"allowBlock"
],[

View file

@ -1,55 +1,55 @@
[[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"],
["text","Title"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Title"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["text","This is an R HTML document. When you click the "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","b"],
["meta.tag.punctuation.end",">"],
["text","Knit HTML"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","b"],
["meta.tag.punctuation.end",">"],
["text"," button a web page will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","This is an R HTML document. When you click the "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","b"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Knit HTML"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","b"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml"," button a web page will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
@ -68,13 +68,13 @@
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"],
["text","You can also embed plots, for example:"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","p"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","You can also embed plots, for example:"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","p"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
@ -93,14 +93,14 @@
"start"
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
]]

View file

@ -32,7 +32,7 @@
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["entity.name.tag.soy","if"],
["meta.tag.if.soy"," "],
@ -42,31 +42,31 @@
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," Hello "],
["text.xml"," Hello "],
["punctuation.definition.tag.begin.soy","{"],
["variable.other.soy","$name"],
["punctuation.definition.tag.end.soy","}"],
["text","!"]
["text.xml","!"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["text","else"],
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["variable.other.soy","$greetingWord"],
["punctuation.definition.tag.end.soy","}"],
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["variable.other.soy","$name"],
["punctuation.definition.tag.end.soy","}"],
["text","!"]
["text.xml","!"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{/"],
["entity.name.tag.soy","if"],
["punctuation.definition.tag.end.soy","}"]
@ -115,7 +115,7 @@
["comment.line.double-slash.soy"," Greet the person."]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["entity.name.tag.soy","call"],
["variable.parameter.soy"," .helloName"],
@ -125,9 +125,9 @@
["string.quoted.double","\"all\""],
["meta.tag.call.soy"," /"],
["punctuation.definition.tag.end.soy","}"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","br"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","br"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["comment.line.double-slash.soy"," "],
@ -135,7 +135,7 @@
["comment.line.double-slash.soy"," Greet the additional people."]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["entity.name.tag.soy","foreach"],
["meta.tag.foreach.soy"," "],
@ -147,14 +147,14 @@
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["entity.name.tag.soy","call"],
["variable.parameter.soy"," .helloName"],
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["entity.name.tag.soy","param"],
["text"," "],
@ -167,13 +167,13 @@
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{/"],
["meta.tag.call.soy","call"],
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["entity.name.tag.soy","if"],
["meta.tag.if.soy"," "],
@ -186,31 +186,31 @@
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","br"],
["meta.tag.punctuation.end",">"],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","br"],
["meta.tag.punctuation.tag-close.xml",">"],
["comment.line.double-slash.soy"," "],
["punctuation.definition.comment.soy","//"],
["comment.line.double-slash.soy"," break after every line except the last"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{/"],
["entity.name.tag.soy","if"],
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{"],
["text","ifempty"],
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," No additional people to greet."]
["text.xml"," No additional people to greet."]
],[
"start",
["text"," "],
["text.xml"," "],
["punctuation.definition.tag.begin.soy","{/"],
["entity.name.tag.soy","foreach"],
["punctuation.definition.tag.end.soy","}"]
@ -275,7 +275,7 @@
["punctuation.definition.tag.end.soy","}"]
],[
"start",
["text"," foo is "],
["text.xml"," foo is "],
["punctuation.definition.tag.begin.soy","{"],
["variable.other.soy","$ij.foo"],
["punctuation.definition.tag.end.soy","}"]

View file

@ -1,65 +1,65 @@
[[
"meta.tag.punctuation.begin0",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","svg"]
"meta.tag.punctuation.tag-open.xml1",
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","svg"]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","width"],
["keyword.operator.separator","="],
["string","\"800\""],
["text"," "],
["entity.other.attribute-name","height"],
["keyword.operator.separator","="],
["string","\"600\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","width"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"800\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","height"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"600\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","xmlns"],
["keyword.operator.separator","="],
["string","\"http://www.w3.org/2000/svg\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","xmlns"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"http://www.w3.org/2000/svg\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","onload"],
["keyword.operator.separator","="],
["string","\"StartAnimation(evt)\""],
["meta.tag.punctuation.end",">"]
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","onload"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"StartAnimation(evt)\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"],
["text","Test Tube Progress Bar"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Test Tube Progress Bar"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","desc"],
["meta.tag.punctuation.end",">"],
["text","Created for the Web Directions SVG competition"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","desc"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","desc"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","Created for the Web Directions SVG competition"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","desc"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"js-no_regex",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.script","script"],
["text"," "],
["entity.other.attribute-name","type"],
["keyword.operator.separator","="],
["string","\"text/ecmascript\""],
["meta.tag.punctuation.end",">"],
["string.begin","<![CDATA["]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.script.tag-name.xml","script"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","type"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"text/ecmascript\""],
["meta.tag.punctuation.tag-close.xml",">"],
["string.cdata.xml","<![CDATA["]
],[
"js-start",
["text"," "],
@ -488,197 +488,197 @@
],[
"start",
["text"," "],
["string.end","]]>"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.script","script"],
["meta.tag.punctuation.end",">"]
["string.cdata.xml","]]>"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.script.tag-name.xml","script"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"meta.tag.punctuation.begin0",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","rect"]
"meta.tag.punctuation.tag-open.xml1",
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","rect"]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","fill"],
["keyword.operator.separator","="],
["string","\"#2e3436\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","fill"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"#2e3436\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","fill-rule"],
["keyword.operator.separator","="],
["string","\"nonzero\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","fill-rule"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"nonzero\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","stroke-width"],
["keyword.operator.separator","="],
["string","\"3\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","stroke-width"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"3\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","y"],
["keyword.operator.separator","="],
["string","\"0\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","y"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"0\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","x"],
["keyword.operator.separator","="],
["string","\"0\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","x"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"0\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","height"],
["keyword.operator.separator","="],
["string","\"600\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","height"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"600\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","width"],
["keyword.operator.separator","="],
["string","\"800\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","width"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"800\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"rect3590\""],
["meta.tag.punctuation.end","/>"]
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"rect3590\""],
["meta.tag.punctuation.tag-close.xml","/>"]
],[
"start"
],[
"meta.tag.punctuation.begin0",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","text"]
"meta.tag.punctuation.tag-open.xml1",
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","text"]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","style"],
["keyword.operator.separator","="],
["string","\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","style"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","x"],
["keyword.operator.separator","="],
["string","\"50\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","x"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"50\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","y"],
["keyword.operator.separator","="],
["string","\"350\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","y"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"350\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"hickory\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"hickory\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","display"],
["keyword.operator.separator","="],
["string","\"none\""],
["meta.tag.punctuation.end",">"]
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","display"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"none\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," Hickory,"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","text"],
["meta.tag.punctuation.end",">"]
["text.xml"," Hickory,"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","text"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","text"]
"meta.tag.punctuation.tag-open.xml1",
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","text"]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","style"],
["keyword.operator.separator","="],
["string","\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","style"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","x"],
["keyword.operator.separator","="],
["string","\"50\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","x"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"50\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","y"],
["keyword.operator.separator","="],
["string","\"350\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","y"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"350\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"dickory\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"dickory\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","display"],
["keyword.operator.separator","="],
["string","\"none\""],
["meta.tag.punctuation.end",">"]
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","display"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"none\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," dickory,"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","text"],
["meta.tag.punctuation.end",">"]
["text.xml"," dickory,"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","text"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","text"]
"meta.tag.punctuation.tag-open.xml1",
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","text"]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","style"],
["keyword.operator.separator","="],
["string","\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","style"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"font-size:144px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Bold\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","x"],
["keyword.operator.separator","="],
["string","\"50\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","x"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"50\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","y"],
["keyword.operator.separator","="],
["string","\"350\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","y"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"350\""]
],[
"meta.tag.punctuation.begin0",
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"dock\""]
"meta.tag.punctuation.tag-open.xml1",
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"dock\""]
],[
"start",
["text"," "],
["entity.other.attribute-name","display"],
["keyword.operator.separator","="],
["string","\"none\""],
["meta.tag.punctuation.end",">"]
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","display"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"none\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," dock!"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","text"],
["meta.tag.punctuation.end",">"]
["text.xml"," dock!"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","text"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","svg"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","svg"],
["meta.tag.punctuation.tag-close.xml",">"]
]]

View file

@ -1,56 +1,56 @@
[[
"start",
["punctuation.doctype.begin","<!"],
["meta.tag.doctype","DOCTYPE"],
["text"," "],
["xml-pe","html"],
["punctuation.doctype.end",">"]
["xml-pe.doctype.xml","<!"],
["xml-pe.doctype.xml","DOCTYPE"],
["text.whitespace.xml"," "],
["xml-pe.xml","html"],
["xml-pe.doctype.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"],
["text","My Webpage"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","title"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","My Webpage"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","title"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","head"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","head"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","ul"],
["text"," "],
["entity.other.attribute-name","id"],
["keyword.operator.separator","="],
["string","\"navigation\""],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","ul"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","id"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"navigation\""],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["meta.tag.twig","{%"],
["text"," "],
["keyword.control.twig","for"],
@ -64,16 +64,16 @@
["meta.tag.twig","%}"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","li"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name.anchor","a"],
["text"," "],
["entity.other.attribute-name","href"],
["keyword.operator.separator","="],
["string","\""],
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","li"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.anchor.tag-name.xml","a"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","href"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\""],
["variable.other.readwrite.local.twig","{{"],
["text"," "],
["identifier","item"],
@ -83,8 +83,8 @@
["support.function.twig","escape"],
["text"," "],
["variable.other.readwrite.local.twig","}}"],
["string","\""],
["meta.tag.punctuation.end",">"],
["string.attribute-value.xml","\""],
["meta.tag.punctuation.tag-close.xml",">"],
["variable.other.readwrite.local.twig","{{"],
["text"," "],
["identifier","item"],
@ -92,15 +92,15 @@
["identifier","caption"],
["text"," "],
["variable.other.readwrite.local.twig","}}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name.anchor","a"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","li"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.anchor.tag-name.xml","a"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","li"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["meta.tag.twig","{%"],
["text"," "],
["keyword.control.twig","endfor"],
@ -108,15 +108,15 @@
["meta.tag.twig","%}"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","ul"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","ul"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"start",
["text"," "],
["text.xml"," "],
["meta.tag.twig","{%"],
["text"," "],
["keyword.control.twig","if"],
@ -142,11 +142,11 @@
"start"
],[
"start",
["text"," "],
["text.xml"," "],
["comment.block.twig","{# is equivalent to #}"]
],[
"start",
["text"," "],
["text.xml"," "],
["meta.tag.twig","{%"],
["text"," "],
["keyword.control.twig","if"],
@ -173,7 +173,7 @@
"start"
],[
"start",
["text"," "],
["text.xml"," "],
["meta.tag.twig","{%"],
["text"," "],
["keyword.control.twig","autoescape"],
@ -183,7 +183,7 @@
["meta.tag.twig","%}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable.other.readwrite.local.twig","{{"],
["text"," "],
["identifier","var"],
@ -191,7 +191,7 @@
["variable.other.readwrite.local.twig","}}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable.other.readwrite.local.twig","{{"],
["text"," "],
["identifier","var"],
@ -199,11 +199,11 @@
["support.function.twig","raw"],
["text"," "],
["variable.other.readwrite.local.twig","}}"],
["text"," "],
["text.xml"," "],
["comment.block.twig","{# var won't be escaped #}"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable.other.readwrite.local.twig","{{"],
["text"," "],
["identifier","var"],
@ -211,11 +211,11 @@
["support.function.twig","escape"],
["text"," "],
["variable.other.readwrite.local.twig","}}"],
["text"," "],
["text.xml"," "],
["comment.block.twig","{# var won't be doubled-escaped #}"]
],[
"start",
["text"," "],
["text.xml"," "],
["meta.tag.twig","{%"],
["text"," "],
["keyword.control.twig","endautoescape"],
@ -225,7 +225,7 @@
"start"
],[
"start",
["text"," "],
["text.xml"," "],
["variable.other.readwrite.local.twig","{{"],
["text"," "],
["keyword.control.twig","include"],
@ -245,7 +245,7 @@
"start"
],[
"start",
["text"," "],
["text.xml"," "],
["variable.other.readwrite.local.twig","{{"],
["string","\"string "],
["constant.language.escape","#{with}"],
@ -258,17 +258,17 @@
["variable.other.readwrite.local.twig","}}"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","h1"],
["meta.tag.punctuation.end",">"],
["text","My Webpage"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","h1"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","h1"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","My Webpage"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","h1"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
["text.xml"," "],
["variable.other.readwrite.local.twig","{{"],
["text"," "],
["identifier","a_variable"],
@ -276,13 +276,13 @@
["variable.other.readwrite.local.twig","}}"]
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","body"],
["meta.tag.punctuation.end",">"]
["text.xml"," "],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","body"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","html"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","html"],
["meta.tag.punctuation.tag-close.xml",">"]
]]

View file

@ -26,15 +26,15 @@
],[
"start",
["text"," "],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","li"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","li"],
["meta.tag.punctuation.tag-close.xml",">"],
["variable","${"],
["identifier","item"],
["variable","}"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","li"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","li"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["keyword","#end"]
@ -55,11 +55,14 @@
["text"," "],
["lparen","["],
["constant.numeric","1"],
["text",", "],
["text.xml",","],
["text"," "],
["constant.numeric","2"],
["text",", "],
["text.xml",","],
["text"," "],
["constant.numeric","3"],
["text",", "],
["text.xml",","],
["text"," "],
["constant.numeric","4"],
["rparen","]"],
["text"," "],
@ -68,9 +71,9 @@
"start"
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","ul"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","ul"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text"," "],
@ -97,11 +100,12 @@
["lparen","("],
["text"," "],
["support.function","$_MathTool"],
["text","."],
["text.xml","."],
["identifier","mod"],
["lparen","("],
["variable","$item"],
["text",", "],
["text.xml",","],
["text"," "],
["constant.numeric","2"],
["rparen",")"],
["text"," "],
@ -128,16 +132,16 @@
["keyword","#end"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name","ul"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","ul"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"js-start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name.script","script"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.script.tag-name.xml","script"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"js-comment_regex_allowed",
["text"," "],
@ -216,16 +220,16 @@
["paren.rparen","}"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name.script","script"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.script.tag-name.xml","script"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start"
],[
"css-start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name.style","style"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.style.tag-name.xml","style"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
["css-comment","css-start"],
["text"," "],
@ -275,7 +279,7 @@
["paren.rparen","}"]
],[
"start",
["meta.tag.punctuation.begin","</"],
["meta.tag.name.style","style"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.style.tag-name.xml","style"],
["meta.tag.punctuation.tag-close.xml",">"]
]]

View file

@ -1,43 +1,43 @@
[[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","Juhu"],
["meta.tag.punctuation.end",">"],
["text","//Juhu Kinners"],
["meta.tag.punctuation.begin","</"],
["meta.tag.name","Kinners"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","Juhu"],
["meta.tag.punctuation.tag-close.xml",">"],
["text.xml","//Juhu Kinners"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","Kinners"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","test: two tags in the same lines should be in separate tokens\""]
["text.xml","test: two tags in the same lines should be in separate tokens\""]
],[
"start",
["meta.tag.punctuation.begin","<"],
["meta.tag.name","Juhu"],
["meta.tag.punctuation.end",">"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","Kinners"],
["meta.tag.punctuation.end",">"]
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","Juhu"],
["meta.tag.punctuation.tag-close.xml",">"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","Kinners"],
["meta.tag.punctuation.tag-close.xml",">"]
],[
"start",
["text","test: multiline attributes\""]
["text.xml","test: multiline attributes\""]
],[
["qqstring_inner","meta.tag.punctuation.begin"],
["meta.tag.punctuation.begin","<"],
["meta.tag.name","copy"],
["text"," "],
["entity.other.attribute-name","set"],
["keyword.operator.separator","="],
["string","\"{"]
["string.attribute-value.xml0","meta.tag.punctuation.tag-open.xml"],
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","copy"],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","set"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"{"]
],[
["qqstring_inner","meta.tag.punctuation.begin"],
["string","}\""],
["text"," "],
["entity.other.attribute-name","undo"],
["keyword.operator.separator","="],
["string","\"{"]
["string.attribute-value.xml0","meta.tag.punctuation.tag-open.xml"],
["string.attribute-value.xml","}\""],
["text.tag-whitespace.xml"," "],
["entity.other.attribute-name.xml","undo"],
["keyword.operator.attribute-equals.xml","="],
["string.attribute-value.xml","\"{"]
],[
"start",
["string","}\""],
["meta.tag.punctuation.end","/>"]
["string.attribute-value.xml","}\""],
["meta.tag.punctuation.tag-close.xml","/>"]
]]

View file

@ -1,95 +0,0 @@
/* ***** 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 XmlBehaviour = require("../behaviour/xml").XmlBehaviour;
var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
var TokenIterator = require("../../token_iterator").TokenIterator;
var voidElements = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
function hasType(token, type) {
var hasType = true;
var typeList = token.type.split('.');
var needleList = type.split('.');
needleList.forEach(function(needle){
if (typeList.indexOf(needle) == -1) {
hasType = false;
return false;
}
});
return hasType;
}
var CfmlBehaviour = function () {
this.inherit(XmlBehaviour); // Get xml behaviour
this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
if (text == '>') {
var position = editor.getCursorPosition();
var iterator = new TokenIterator(session, position.row, position.column);
var token = iterator.getCurrentToken();
if (token && hasType(token, 'meta.tag.name') && /^cf+(abort|application|argument|associate|break|cache|collection|cookie|dbinfo|directory|dump|else|elseif|error|exchangecalendar|exchangeconnection|exchangecontact|exchangefilter|exchangetask|exit|feed|file|flush|ftp|header|htmlhead|httpparam|image|import|include|index|insert|invokeargument|location|log|mailparam|NTauthenticate|object|objectcache|param|pdfformparam|print|procparam|procresult|property|queryparam|registry|reportparam|rethrow|return|schedule|search|set|setting|throw|zipparam)$/gi.test(token.value))
return;
if (hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column)
return;
var atCursor = false;
if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
do {
token = iterator.stepBackward();
} while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
} else {
atCursor = true;
}
if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) {
return
}
var element = token.value;
if (atCursor){
var element = element.substring(0, position.column - token.start);
}
if (voidElements.indexOf(element) !== -1){
return;
}
return {
text: '>' + '</' + element + '>',
selection: [1, 1]
}
}
});
}
oop.inherits(CfmlBehaviour, XmlBehaviour);
exports.CfmlBehaviour = CfmlBehaviour;
});

View file

@ -41,89 +41,34 @@ var SAFE_INSERT_IN_TOKENS =
var SAFE_INSERT_BEFORE_TOKENS =
["text", "paren.rparen", "punctuation.operator", "comment"];
var context;
var contextCache = {}
var initContext = function(editor) {
var id = -1;
if (editor.multiSelect) {
id = editor.selection.id;
if (contextCache.rangeCount != editor.multiSelect.rangeCount)
contextCache = {rangeCount: editor.multiSelect.rangeCount};
}
if (contextCache[id])
return context = contextCache[id];
context = contextCache[id] = {
autoInsertedBrackets: 0,
autoInsertedRow: -1,
autoInsertedLineEnd: "",
maybeInsertedBrackets: 0,
maybeInsertedRow: -1,
maybeInsertedLineStart: "",
maybeInsertedLineEnd: ""
};
};
var autoInsertedBrackets = 0;
var autoInsertedRow = -1;
var autoInsertedLineEnd = "";
var maybeInsertedBrackets = 0;
var maybeInsertedRow = -1;
var maybeInsertedLineStart = "";
var maybeInsertedLineEnd = "";
var CstyleBehaviour = function () {
CstyleBehaviour.isSaneInsertion = function(editor, session) {
var cursor = editor.getCursorPosition();
var iterator = new TokenIterator(session, cursor.row, cursor.column);
// Don't insert in the middle of a keyword/identifier/lexical
if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
// Look ahead in case we're at the end of a token
var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
return false;
}
// Only insert in front of whitespace/comments
iterator.stepForward();
return iterator.getCurrentTokenRow() !== cursor.row ||
this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
};
CstyleBehaviour.$matchTokenType = function(token, types) {
return types.indexOf(token.type || token) > -1;
};
CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
// Reset previous state if text or context changed too much
if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
autoInsertedBrackets = 0;
autoInsertedRow = cursor.row;
autoInsertedLineEnd = bracket + line.substr(cursor.column);
autoInsertedBrackets++;
};
CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
if (!this.isMaybeInsertedClosing(cursor, line))
maybeInsertedBrackets = 0;
maybeInsertedRow = cursor.row;
maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
maybeInsertedLineEnd = line.substr(cursor.column);
maybeInsertedBrackets++;
};
CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
return autoInsertedBrackets > 0 &&
cursor.row === autoInsertedRow &&
bracket === autoInsertedLineEnd[0] &&
line.substr(cursor.column) === autoInsertedLineEnd;
};
CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
return maybeInsertedBrackets > 0 &&
cursor.row === maybeInsertedRow &&
line.substr(cursor.column) === maybeInsertedLineEnd &&
line.substr(0, cursor.column) == maybeInsertedLineStart;
};
CstyleBehaviour.popAutoInsertedClosing = function() {
autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
autoInsertedBrackets--;
};
CstyleBehaviour.clearMaybeInsertedClosing = function() {
maybeInsertedBrackets = 0;
maybeInsertedRow = -1;
};
this.add("braces", "insertion", function (state, action, editor, session, text) {
var CstyleBehaviour = function() {
this.add("braces", "insertion", function(state, action, editor, session, text) {
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
if (text == '{') {
initContext(editor);
var selection = editor.getSelectionRange();
var selected = session.doc.getTextRange(selection);
if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
@ -147,6 +92,7 @@ var CstyleBehaviour = function () {
}
}
} else if (text == '}') {
initContext(editor);
var rightChar = line.substring(cursor.column, cursor.column + 1);
if (rightChar == '}') {
var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
@ -159,9 +105,10 @@ var CstyleBehaviour = function () {
}
}
} else if (text == "\n" || text == "\r\n") {
initContext(editor);
var closing = "";
if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
closing = lang.stringRepeat("}", maybeInsertedBrackets);
closing = lang.stringRepeat("}", context.maybeInsertedBrackets);
CstyleBehaviour.clearMaybeInsertedClosing();
}
var rightChar = line.substring(cursor.column, cursor.column + 1);
@ -173,6 +120,7 @@ var CstyleBehaviour = function () {
} else if (closing) {
var next_indent = this.$getIndent(line);
} else {
CstyleBehaviour.clearMaybeInsertedClosing();
return;
}
var indent = next_indent + session.getTabString();
@ -186,22 +134,24 @@ var CstyleBehaviour = function () {
}
});
this.add("braces", "deletion", function (state, action, editor, session, range) {
this.add("braces", "deletion", function(state, action, editor, session, range) {
var selected = session.doc.getTextRange(range);
if (!range.isMultiLine() && selected == '{') {
initContext(editor);
var line = session.doc.getLine(range.start.row);
var rightChar = line.substring(range.end.column, range.end.column + 1);
if (rightChar == '}') {
range.end.column++;
return range;
} else {
maybeInsertedBrackets--;
context.maybeInsertedBrackets--;
}
}
});
this.add("parens", "insertion", function (state, action, editor, session, text) {
this.add("parens", "insertion", function(state, action, editor, session, text) {
if (text == '(') {
initContext(editor);
var selection = editor.getSelectionRange();
var selected = session.doc.getTextRange(selection);
if (selected !== "" && editor.getWrapBehavioursEnabled()) {
@ -217,6 +167,7 @@ var CstyleBehaviour = function () {
};
}
} else if (text == ')') {
initContext(editor);
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
var rightChar = line.substring(cursor.column, cursor.column + 1);
@ -233,9 +184,10 @@ var CstyleBehaviour = function () {
}
});
this.add("parens", "deletion", function (state, action, editor, session, range) {
this.add("parens", "deletion", function(state, action, editor, session, range) {
var selected = session.doc.getTextRange(range);
if (!range.isMultiLine() && selected == '(') {
initContext(editor);
var line = session.doc.getLine(range.start.row);
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
if (rightChar == ')') {
@ -245,8 +197,9 @@ var CstyleBehaviour = function () {
}
});
this.add("brackets", "insertion", function (state, action, editor, session, text) {
this.add("brackets", "insertion", function(state, action, editor, session, text) {
if (text == '[') {
initContext(editor);
var selection = editor.getSelectionRange();
var selected = session.doc.getTextRange(selection);
if (selected !== "" && editor.getWrapBehavioursEnabled()) {
@ -262,6 +215,7 @@ var CstyleBehaviour = function () {
};
}
} else if (text == ']') {
initContext(editor);
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
var rightChar = line.substring(cursor.column, cursor.column + 1);
@ -278,9 +232,10 @@ var CstyleBehaviour = function () {
}
});
this.add("brackets", "deletion", function (state, action, editor, session, range) {
this.add("brackets", "deletion", function(state, action, editor, session, range) {
var selected = session.doc.getTextRange(range);
if (!range.isMultiLine() && selected == '[') {
initContext(editor);
var line = session.doc.getLine(range.start.row);
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
if (rightChar == ']') {
@ -290,8 +245,9 @@ var CstyleBehaviour = function () {
}
});
this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
this.add("string_dquotes", "insertion", function(state, action, editor, session, text) {
if (text == '"' || text == "'") {
initContext(editor);
var quote = text;
var selection = editor.getSelectionRange();
var selected = session.doc.getTextRange(selection);
@ -350,9 +306,10 @@ var CstyleBehaviour = function () {
}
});
this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
var selected = session.doc.getTextRange(range);
if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
initContext(editor);
var line = session.doc.getLine(range.start.row);
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
if (rightChar == selected) {
@ -364,6 +321,79 @@ var CstyleBehaviour = function () {
};
CstyleBehaviour.isSaneInsertion = function(editor, session) {
var cursor = editor.getCursorPosition();
var iterator = new TokenIterator(session, cursor.row, cursor.column);
// Don't insert in the middle of a keyword/identifier/lexical
if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
// Look ahead in case we're at the end of a token
var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
return false;
}
// Only insert in front of whitespace/comments
iterator.stepForward();
return iterator.getCurrentTokenRow() !== cursor.row ||
this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
};
CstyleBehaviour.$matchTokenType = function(token, types) {
return types.indexOf(token.type || token) > -1;
};
CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
// Reset previous state if text or context changed too much
if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))
context.autoInsertedBrackets = 0;
context.autoInsertedRow = cursor.row;
context.autoInsertedLineEnd = bracket + line.substr(cursor.column);
context.autoInsertedBrackets++;
};
CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
if (!this.isMaybeInsertedClosing(cursor, line))
context.maybeInsertedBrackets = 0;
context.maybeInsertedRow = cursor.row;
context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
context.maybeInsertedLineEnd = line.substr(cursor.column);
context.maybeInsertedBrackets++;
};
CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
return context.autoInsertedBrackets > 0 &&
cursor.row === context.autoInsertedRow &&
bracket === context.autoInsertedLineEnd[0] &&
line.substr(cursor.column) === context.autoInsertedLineEnd;
};
CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
return context.maybeInsertedBrackets > 0 &&
cursor.row === context.maybeInsertedRow &&
line.substr(cursor.column) === context.maybeInsertedLineEnd &&
line.substr(0, cursor.column) == context.maybeInsertedLineStart;
};
CstyleBehaviour.popAutoInsertedClosing = function() {
context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);
context.autoInsertedBrackets--;
};
CstyleBehaviour.clearMaybeInsertedClosing = function() {
if (context) {
context.maybeInsertedBrackets = 0;
context.maybeInsertedRow = -1;
}
};
oop.inherits(CstyleBehaviour, Behaviour);
exports.CstyleBehaviour = CstyleBehaviour;

View file

@ -33,55 +33,13 @@ define(function(require, exports, module) {
var oop = require("../../lib/oop");
var XmlBehaviour = require("../behaviour/xml").XmlBehaviour;
var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
var TokenIterator = require("../../token_iterator").TokenIterator;
var voidElements = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
function hasType(token, type) {
var tokenTypes = token.type.split('.');
return type.split('.').every(function(type){
return (tokenTypes.indexOf(type) !== -1);
});
return hasType;
}
var HtmlBehaviour = function () {
this.inherit(XmlBehaviour); // Get xml behaviour
this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
if (text == '>') {
var position = editor.getCursorPosition();
var iterator = new TokenIterator(session, position.row, position.column);
var token = iterator.getCurrentToken();
XmlBehaviour.call(this);
};
if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column)
return;
var atCursor = false;
if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
do {
token = iterator.stepBackward();
} while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
} else {
atCursor = true;
}
if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) {
return;
}
var element = token.value;
if (atCursor){
var element = element.substring(0, position.column - token.start);
}
if (voidElements.indexOf(element) !== -1){
return;
}
return {
text: '>' + '</' + element + '>',
selection: [1, 1]
}
}
});
}
oop.inherits(HtmlBehaviour, XmlBehaviour);
exports.HtmlBehaviour = HtmlBehaviour;

View file

@ -33,49 +33,116 @@ define(function(require, exports, module) {
var oop = require("../../lib/oop");
var Behaviour = require("../behaviour").Behaviour;
var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
var TokenIterator = require("../../token_iterator").TokenIterator;
function hasType(token, type) {
var tokenTypes = token.type.split('.');
return type.split('.').every(function(type){
return (tokenTypes.indexOf(type) !== -1);
});
return hasType;
function is(token, type) {
return token.type.lastIndexOf(type + ".xml") > -1;
}
var XmlBehaviour = function () {
this.inherit(CstyleBehaviour, ["string_dquotes"]); // Get string behaviour
this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
if (text == '"' || text == "'") {
var quote = text;
var selected = session.doc.getTextRange(editor.getSelectionRange());
if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
return {
text: quote + selected + quote,
selection: false
};
}
var cursor = editor.getCursorPosition();
var line = session.doc.getLine(cursor.row);
var rightChar = line.substring(cursor.column, cursor.column + 1);
var iterator = new TokenIterator(session, cursor.row, cursor.column);
var token = iterator.getCurrentToken();
if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) {
// Ignore input and move right one if we're typing over the closing quote.
return {
text: "",
selection: [1, 1]
};
}
if (!token)
token = iterator.stepBackward();
if (!token)
return;
while (is(token, "tag-whitespace") || is(token, "whitespace")) {
token = iterator.stepBackward();
}
var rightSpace = !rightChar || rightChar.match(/\s/);
if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) {
return {
text: quote + quote,
selection: [1, 1]
};
}
}
});
this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
var selected = session.doc.getTextRange(range);
if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
var line = session.doc.getLine(range.start.row);
var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
if (rightChar == selected) {
range.end.column++;
return range;
}
}
});
this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
if (text == '>') {
var position = editor.getCursorPosition();
var iterator = new TokenIterator(session, position.row, position.column);
var token = iterator.getCurrentToken();
var token = iterator.getCurrentToken() || iterator.stepBackward();
if (token && hasType(token, 'string') && iterator.getCurrentTokenColumn() + token.value.length > position.column)
// exit if we're not in a tag
if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
return;
var atCursor = false;
if (!token || !hasType(token, 'meta.tag') && !(hasType(token, 'text') && token.value.match('/'))){
do {
token = iterator.stepBackward();
} while (token && (hasType(token, 'string') || hasType(token, 'keyword.operator') || hasType(token, 'entity.attribute-name') || hasType(token, 'text')));
} else {
atCursor = true;
}
if (!token || !hasType(token, 'meta.tag.name') || iterator.stepBackward().value.match('/')) {
// exit if we're inside of a quoted attribute value
if (is(token, "reference.attribute-value"))
return;
if (is(token, "attribute-value")) {
var firstChar = token.value.charAt(0);
if (firstChar == '"' || firstChar == "'") {
var lastChar = token.value.charAt(token.value.length - 1);
var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;
if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)
return;
}
}
var tag = token.value;
if (atCursor){
var tag = tag.substring(0, position.column - token.start);
// find tag name
while (!is(token, "tag-name")) {
token = iterator.stepBackward();
}
var tokenRow = iterator.getCurrentTokenRow();
var tokenColumn = iterator.getCurrentTokenColumn();
// exit if the tag is ending
if (is(iterator.stepBackward(), "end-tag-open"))
return;
var element = token.value;
if (tokenRow == position.row)
element = element.substring(0, position.column - tokenColumn);
if (this.voidElements.hasOwnProperty(element.toLowerCase()))
return;
return {
text: '>' + '</' + tag + '>',
text: '>' + '</' + element + '>',
selection: [1, 1]
}
};
}
});
@ -91,12 +158,13 @@ var XmlBehaviour = function () {
return {
text: '\n' + indent + '\n' + next_indent,
selection: [1, indent.length, 1, indent.length]
}
};
}
}
});
}
};
oop.inherits(XmlBehaviour, Behaviour);
exports.XmlBehaviour = XmlBehaviour;

View file

@ -47,6 +47,10 @@ var CirruHighlightRules = function() {
}, {
token: 'storage.modifier',
regex: /\(/,
}, {
token: 'storage.modifier',
regex: /\,/,
next: 'line',
}, {
token: 'support.function',
regex: /[^\(\)\"\s]+/,
@ -88,6 +92,10 @@ var CirruHighlightRules = function() {
token: 'markup.raw',
regex: /^\s*/,
next: 'start',
}, {
token: 'storage.modifier',
regex: /\$/,
next: 'start',
}, {
token: 'variable.parameter',
regex: /[^\(\)\"\s]+/
@ -102,10 +110,6 @@ var CirruHighlightRules = function() {
token: 'markup.raw',
regex: /^\ */,
next: 'start',
}, {
token: 'storage.modifier',
regex: /\$/,
next: 'start',
}, {
token: 'string.quoted.double',
regex: /"/,

View file

@ -32,28 +32,25 @@ define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var XmlMode = require("./xml").Mode;
var JavaScriptMode = require("./javascript").Mode;
var CssMode = require("./css").Mode;
var lang = require("../lib/lang");
var HtmlMode = require("./html").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var ColdfusionHighlightRules = require("./coldfusion_highlight_rules").ColdfusionHighlightRules;
var CfmlBehaviour = require("./behaviour/coldfusion").CfmlBehaviour;
var voidElements = "cfabort|cfapplication|cfargument|cfassociate|cfbreak|cfcache|cfcollection|cfcookie|cfdbinfo|cfdirectory|cfdump|cfelse|cfelseif|cferror|cfexchangecalendar|cfexchangeconnection|cfexchangecontact|cfexchangefilter|cfexchangetask|cfexit|cffeed|cffile|cfflush|cfftp|cfheader|cfhtmlhead|cfhttpparam|cfimage|cfimport|cfinclude|cfindex|cfinsert|cfinvokeargument|cflocation|cflog|cfmailparam|cfNTauthenticate|cfobject|cfobjectcache|cfparam|cfpdfformparam|cfprint|cfprocparam|cfprocresult|cfproperty|cfqueryparam|cfregistry|cfreportparam|cfrethrow|cfreturn|cfschedule|cfsearch|cfset|cfsetting|cfthrow|cfzipparam)".split("|");
var Mode = function() {
XmlMode.call(this);
HtmlMode.call(this);
this.HighlightRules = ColdfusionHighlightRules;
this.$behaviour = new CfmlBehaviour();
this.createModeDelegates({
"js-": JavaScriptMode,
"css-": CssMode
});
};
oop.inherits(Mode, XmlMode);
oop.inherits(Mode, HtmlMode);
(function() {
// mix with html void elements
this.voidElements = oop.mixin(lang.arrayToMap(voidElements), this.voidElements);
this.getNextLineIndent = function(state, line, tab) {
return this.$getIndent(line);
};

View file

@ -36,39 +36,8 @@ var MixedFoldMode = require("./mixed").FoldMode;
var XmlFoldMode = require("./xml").FoldMode;
var CStyleFoldMode = require("./cstyle").FoldMode;
var FoldMode = exports.FoldMode = function() {
MixedFoldMode.call(this, new XmlFoldMode({
// void elements
"area": 1,
"base": 1,
"br": 1,
"col": 1,
"command": 1,
"embed": 1,
"hr": 1,
"img": 1,
"input": 1,
"keygen": 1,
"link": 1,
"meta": 1,
"param": 1,
"source": 1,
"track": 1,
"wbr": 1,
// optional tags
"li": 1,
"dt": 1,
"dd": 1,
"p": 1,
"rt": 1,
"rp": 1,
"optgroup": 1,
"option": 1,
"colgroup": 1,
"td": 1,
"th": 1
}), {
var FoldMode = exports.FoldMode = function(voidElements, optionalTags) {
MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {
"js-": new CStyleFoldMode(),
"css-": new CStyleFoldMode()
});

View file

@ -37,62 +37,98 @@ var Range = require("../../range").Range;
var BaseFoldMode = require("./fold_mode").FoldMode;
var TokenIterator = require("../../token_iterator").TokenIterator;
var FoldMode = exports.FoldMode = function(voidElements) {
var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {
BaseFoldMode.call(this);
this.voidElements = voidElements || {};
// TODO folding support for optional end tags
this.voidElements = oop.mixin(voidElements || {}, optionalEndTags || {});
};
oop.inherits(FoldMode, BaseFoldMode);
var Tag = function() {
this.tagName = "";
this.closing = false;
this.selfClosing = false;
this.start = {row: 0, column: 0};
this.end = {row: 0, column: 0};
};
function is(token, type) {
return token.type.lastIndexOf(type + ".xml") > -1;
}
(function() {
this.getFoldWidget = function(session, foldStyle, row) {
var tag = this._getFirstTagInLine(session, row);
if (tag.closing)
if (!tag)
return "";
if (tag.closing || (!tag.tagName && tag.selfClosing))
return foldStyle == "markbeginend" ? "end" : "";
if (!tag.tagName || this.voidElements[tag.tagName.toLowerCase()])
if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))
return "";
if (tag.selfClosing)
return "";
if (tag.value.indexOf("/" + tag.tagName) !== -1)
if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))
return "";
return "start";
};
/*
* returns a first tag (or a fragment) in a line
*/
this._getFirstTagInLine = function(session, row) {
var tokens = session.getTokens(row);
var value = "";
var tag = new Tag();
for (var i = 0; i < tokens.length; i++) {
var token = tokens[i];
if (token.type.lastIndexOf("meta.tag", 0) === 0)
value += token.value;
else
value += lang.stringRepeat(" ", token.value.length);
if (is(token, "tag-open")) {
tag.end.column = tag.start.column + token.value.length;
tag.closing = is(token, "end-tag-open");
token = tokens[++i];
if (!token)
return null;
tag.tagName = token.value;
tag.end.column += token.value.length;
for (i++; i < tokens.length; i++) {
token = tokens[i];
tag.end.column += token.value.length;
if (is(token, "tag-close")) {
tag.selfClosing = token.value == '/>';
break;
}
}
return tag;
} else if (is(token, "tag-close")) {
tag.selfClosing = token.value == '/>';
return tag;
}
tag.start.column += token.value.length;
}
return this._parseTag(value);
return null;
};
this.tagRe = /^(\s*)(<?(\/?)([-_a-zA-Z0-9:!]*)\s*(\/?)>?)/;
this._parseTag = function(tag) {
var match = tag.match(this.tagRe);
this._findEndTagInLine = function(session, row, tagName, startColumn) {
var tokens = session.getTokens(row);
var column = 0;
return {
value: tag,
match: match ? match[2] : "",
closing: match ? !!match[3] : false,
selfClosing: match ? !!match[5] || match[2] == "/>" : false,
tagName: match ? match[4] : "",
column: match[1] ? column + match[1].length : column
};
for (var i = 0; i < tokens.length; i++) {
var token = tokens[i];
column += token.value.length;
if (column < startColumn)
continue;
if (is(token, "end-tag-open")) {
token = tokens[i + 1];
if (token && token.value == tagName)
return true;
}
}
return false;
};
/*
* reads a full tag and places the iterator after the tag
*/
@ -100,32 +136,24 @@ oop.inherits(FoldMode, BaseFoldMode);
var token = iterator.getCurrentToken();
if (!token)
return null;
var value = "";
var start;
var tag = new Tag();
do {
if (token.type.lastIndexOf("meta.tag", 0) === 0) {
if (!start) {
var start = {
row: iterator.getCurrentTokenRow(),
column: iterator.getCurrentTokenColumn()
};
}
value += token.value;
if (value.indexOf(">") !== -1) {
var tag = this._parseTag(value);
tag.start = start;
tag.end = {
row: iterator.getCurrentTokenRow(),
column: iterator.getCurrentTokenColumn() + token.value.length
};
iterator.stepForward();
return tag;
}
if (is(token, "tag-open")) {
tag.closing = is(token, "end-tag-open");
tag.start.row = iterator.getCurrentTokenRow();
tag.start.column = iterator.getCurrentTokenColumn();
} else if (is(token, "tag-name")) {
tag.tagName = token.value;
} else if (is(token, "tag-close")) {
tag.selfClosing = token.value == "/>";
tag.end.row = iterator.getCurrentTokenRow();
tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
iterator.stepForward();
return tag;
}
} while(token = iterator.stepForward());
return null;
};
@ -133,32 +161,24 @@ oop.inherits(FoldMode, BaseFoldMode);
var token = iterator.getCurrentToken();
if (!token)
return null;
var value = "";
var end;
var tag = new Tag();
do {
if (token.type.lastIndexOf("meta.tag", 0) === 0) {
if (!end) {
end = {
row: iterator.getCurrentTokenRow(),
column: iterator.getCurrentTokenColumn() + token.value.length
};
}
value = token.value + value;
if (value.indexOf("<") !== -1) {
var tag = this._parseTag(value);
tag.end = end;
tag.start = {
row: iterator.getCurrentTokenRow(),
column: iterator.getCurrentTokenColumn()
};
iterator.stepBackward();
return tag;
}
if (is(token, "tag-open")) {
tag.closing = is(token, "end-tag-open");
tag.start.row = iterator.getCurrentTokenRow();
tag.start.column = iterator.getCurrentTokenColumn();
iterator.stepBackward();
return tag;
} else if (is(token, "tag-name")) {
tag.tagName = token.value;
} else if (is(token, "tag-close")) {
tag.selfClosing = token.value == "/>";
tag.end.row = iterator.getCurrentTokenRow();
tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
}
} while(token = iterator.stepBackward());
return null;
};
@ -169,10 +189,10 @@ oop.inherits(FoldMode, BaseFoldMode);
if (!tag || top.tagName == tag.tagName) {
return stack.pop();
}
else if (this.voidElements[tag.tagName]) {
else if (this.voidElements.hasOwnProperty(tag.tagName)) {
return;
}
else if (this.voidElements[top.tagName]) {
else if (this.voidElements.hasOwnProperty(top.tagName)) {
stack.pop();
continue;
} else {
@ -184,7 +204,7 @@ oop.inherits(FoldMode, BaseFoldMode);
this.getFoldWidgetRange = function(session, foldStyle, row) {
var firstTag = this._getFirstTagInLine(session, row);
if (!firstTag.match)
if (!firstTag)
return null;
var isBackward = firstTag.closing || firstTag.selfClosing;
@ -192,10 +212,10 @@ oop.inherits(FoldMode, BaseFoldMode);
var tag;
if (!isBackward) {
var iterator = new TokenIterator(session, row, firstTag.column);
var iterator = new TokenIterator(session, row, firstTag.start.column);
var start = {
row: row,
column: firstTag.column + firstTag.tagName.length + 2
column: firstTag.start.column + firstTag.tagName.length + 2
};
while (tag = this._readTagForward(iterator)) {
if (tag.selfClosing) {
@ -213,15 +233,15 @@ oop.inherits(FoldMode, BaseFoldMode);
return Range.fromPoints(start, tag.start);
}
else {
stack.push(tag)
stack.push(tag);
}
}
}
else {
var iterator = new TokenIterator(session, row, firstTag.column + firstTag.match.length);
var iterator = new TokenIterator(session, row, firstTag.end.column);
var end = {
row: row,
column: firstTag.column
column: firstTag.start.column
};
while (tag = this._readTagBackward(iterator)) {
@ -242,7 +262,7 @@ oop.inherits(FoldMode, BaseFoldMode);
}
}
else {
stack.push(tag)
stack.push(tag);
}
}
}

81
lib/ace/mode/gherkin.js Normal file
View file

@ -0,0 +1,81 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2014, 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) {
var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var GherkinHighlightRules = require("./gherkin_highlight_rules").GherkinHighlightRules;
var Mode = function() {
this.HighlightRules = GherkinHighlightRules;
};
oop.inherits(Mode, TextMode);
(function() {
this.lineCommentStart = "#";
this.$id = "ace/mode/gherkin";
this.getNextLineIndent = function(state, line, tab) {
var indent = this.$getIndent(line);
var space2 = " ";
var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
var tokens = tokenizedLine.tokens;
console.log(state)
if(line.match("[ ]*\\|")) {
indent += "| ";
}
if (tokens.length && tokens[tokens.length-1].type == "comment") {
return indent;
}
if (state == "start") {
if (line.match("Scenario:|Feature:|Scenario\ Outline:|Background:")) {
indent += space2;
} else if(line.match("(Given|Then).+(:)$|Examples:")) {
indent += space2;
} else if(line.match("\\*.+")) {
indent += "* ";
}
}
return indent;
};
}).call(Mode.prototype);
exports.Mode = Mode;
});

View file

@ -0,0 +1,113 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2014, 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) {
var oop = require("../lib/oop");
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";
var GherkinHighlightRules = function() {
// need to include constant ints
this.$rules = {
start : [{
token: 'constant.numeric',
regex: "(?:(?:[1-9]\\d*)|(?:0))"
}, {
token : "comment",
regex : "#.*$"
}, {
token : "keyword",
regex : "Feature:|Background:|Scenario:|Scenario\ Outline:|Examples:|Given|When|Then|And|But|\\*",
}, {
token : "string", // multi line """ string start
regex : '"{3}',
next : "qqstring3"
}, {
token : "string", // " string
regex : '"',
next : "qqstring"
}, {
token : "comment",
regex : "@[A-Za-z0-9]+",
next : "start"
}, {
token : "comment",
regex : "<.+>"
}, {
token : "comment",
regex : "\\| ",
next : "table-item"
}, {
token : "comment",
regex : "\\|$",
next : "start"
}],
"qqstring3" : [ {
token : "constant.language.escape",
regex : stringEscape
}, {
token : "string", // multi line """ string end
regex : '"{3}',
next : "start"
}, {
defaultToken : "string"
}],
"qqstring" : [{
token : "constant.language.escape",
regex : stringEscape
}, {
token : "string",
regex : "\\\\$",
next : "qqstring"
}, {
token : "string",
regex : '"|$',
next : "start"
}, {
defaultToken: "string"
}],
"table-item" : [{
token : "string",
regex : "[A-Za-z0-9 ]*",
next : "start"
}],
};
//new TextHighlightRules().getRules();
}
oop.inherits(GherkinHighlightRules, TextHighlightRules);
exports.GherkinHighlightRules = GherkinHighlightRules;
});

View file

@ -32,20 +32,25 @@ define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var lang = require("../lib/lang");
var TextMode = require("./text").Mode;
var JavaScriptMode = require("./javascript").Mode;
var CssMode = require("./css").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;
var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
var HtmlFoldMode = require("./folding/html").FoldMode;
var HtmlCompletions = require("./html_completions").HtmlCompletions;
var WorkerClient = require("../worker/worker_client").WorkerClient;
// http://www.w3.org/TR/html5/syntax.html#void-elements
var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", "track", "wbr"];
var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"];
var Mode = function(options) {
this.fragmentContext = options && options.fragmentContext;
this.HighlightRules = HtmlHighlightRules;
this.$behaviour = new HtmlBehaviour();
this.$behaviour = new XmlBehaviour();
this.$completer = new HtmlCompletions();
this.createModeDelegates({
@ -53,7 +58,7 @@ var Mode = function(options) {
"css-": CssMode
});
this.foldingRules = new HtmlFoldMode();
this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));
};
oop.inherits(Mode, TextMode);
@ -61,6 +66,8 @@ oop.inherits(Mode, TextMode);
this.blockComment = {start: "<!--", end: "-->"};
this.voidElements = lang.arrayToMap(voidElements);
this.getNextLineIndent = function(state, line, tab) {
return this.$getIndent(line);
};

View file

@ -1,5 +1,5 @@
define(["require", "exports", "module"], function(require, exports, module){
require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(require,module,exports){
define(function(require, exports, module){
var req = require=(function(e,t,n){function i(n,s){if(!t[n]){if(!e[n]){var o=typeof require=="function"&&require;if(!s&&o)return o(n,!0);if(r)return r(n,!0);throw new Error("Cannot find module '"+n+"'")}var u=t[n]={exports:{}};e[n][0].call(u.exports,function(t){var r=e[n][1][t];return i(r?r:t)},u,u.exports)}return t[n].exports}var r=typeof require=="function"&&require;for(var s=0;s<n.length;s++)i(n[s]);return i})({1:[function(req,module,exports){
function isScopeMarker(node) {
if (node.namespaceURI === "http://www.w3.org/1999/xhtml") {
return node.localName === "applet"
@ -228,9 +228,9 @@ Object.defineProperty(ElementStack.prototype, 'length', {
exports.ElementStack = ElementStack;
},{}],2:[function(require,module,exports){
var entities = require('html5-entities');
var InputStream = require('./InputStream').InputStream;
},{}],2:[function(req,module,exports){
var entities = req('html5-entities');
var InputStream = req('./InputStream').InputStream;
/**
* Magic value for UTF-16 operations.
@ -413,7 +413,7 @@ EntityParser.replaceEntityNumbers = function(c) {
exports.EntityParser = EntityParser;
},{"./InputStream":3,"html5-entities":12}],3:[function(require,module,exports){
},{"./InputStream":3,"html5-entities":12}],3:[function(req,module,exports){
// FIXME convert CR to LF http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#input-stream
function InputStream() {
this.data = '';
@ -523,7 +523,7 @@ InputStream.prototype = {
exports.InputStream = InputStream;
},{}],4:[function(require,module,exports){
},{}],4:[function(req,module,exports){
var SpecialElements = {
"http://www.w3.org/1999/xhtml": [
'address',
@ -704,9 +704,9 @@ StackItem.prototype.isMathMLTextIntegrationPoint = function() {
exports.StackItem = StackItem;
},{}],5:[function(require,module,exports){
var InputStream = require('./InputStream').InputStream;
var EntityParser = require('./EntityParser').EntityParser;
},{}],5:[function(req,module,exports){
var InputStream = req('./InputStream').InputStream;
var EntityParser = req('./EntityParser').EntityParser;
function isWhitespace(c){
return c === " " || c === "\n" || c === "\t" || c === "\r" || c === "\f";
@ -2257,17 +2257,17 @@ Tokenizer.prototype.tokenize = function(source) {
exports.Tokenizer = Tokenizer;
},{"./EntityParser":2,"./InputStream":3}],6:[function(require,module,exports){
(function(){var assert = require('assert');
},{"./EntityParser":2,"./InputStream":3}],6:[function(req,module,exports){
(function(){var assert = req('assert');
var messages = require('./messages.json');
var constants = require('./constants');
var messages = req('./messages.json');
var constants = req('./constants');
var EventEmitter = require('events').EventEmitter;
var EventEmitter = req('events').EventEmitter;
var Tokenizer = require('./Tokenizer').Tokenizer;
var ElementStack = require('./ElementStack').ElementStack;
var StackItem = require('./StackItem').StackItem;
var Tokenizer = req('./Tokenizer').Tokenizer;
var ElementStack = req('./ElementStack').ElementStack;
var StackItem = req('./StackItem').StackItem;
var Marker = {};
@ -5322,7 +5322,7 @@ function formatMessage(format, args) {
exports.TreeBuilder = TreeBuilder;
})()
},{"./ElementStack":1,"./StackItem":4,"./Tokenizer":5,"./constants":7,"./messages.json":8,"assert":13,"events":14}],7:[function(require,module,exports){
},{"./ElementStack":1,"./StackItem":4,"./Tokenizer":5,"./constants":7,"./messages.json":8,"assert":13,"events":14}],7:[function(req,module,exports){
exports.SVGTagMap = {
"altglyph": "altGlyph",
"altglyphdef": "altGlyphDef",
@ -5445,7 +5445,7 @@ exports.ForeignAttributeMap = {
"xmlns": {prefix: null, localName: "xmlns", namespaceURI: "http://www.w3.org/2000/xmlns/"},
"xmlns:xlink": {prefix: "xmlns", localName: "xlink", namespaceURI: "http://www.w3.org/2000/xmlns/"},
};
},{}],8:[function(require,module,exports){
},{}],8:[function(req,module,exports){
module.exports={
"null-character":
"Null character in input stream, replaced with U+FFFD.",
@ -5702,10 +5702,10 @@ module.exports={
"unexpected-start-tag-in-table":
"Unexpected {name}. Expected table content."
}
},{}],"DaboPu":[function(require,module,exports){
var SAXTreeBuilder = require('./SAXTreeBuilder').SAXTreeBuilder;
var Tokenizer = require('../Tokenizer').Tokenizer;
var TreeParser = require('./TreeParser').TreeParser;
},{}],"DaboPu":[function(req,module,exports){
var SAXTreeBuilder = req('./SAXTreeBuilder').SAXTreeBuilder;
var Tokenizer = req('../Tokenizer').Tokenizer;
var TreeParser = req('./TreeParser').TreeParser;
function SAXParser() {
this.contentHandler = null;
@ -5754,9 +5754,9 @@ Object.defineProperty(SAXParser.prototype, 'errorHandler', {
exports.SAXParser = SAXParser;
},{"../Tokenizer":5,"./SAXTreeBuilder":10,"./TreeParser":11}],10:[function(require,module,exports){
var util = require('util');
var TreeBuilder = require('../TreeBuilder').TreeBuilder;
},{"../Tokenizer":5,"./SAXTreeBuilder":10,"./TreeParser":11}],10:[function(req,module,exports){
var util = req('util');
var TreeBuilder = req('../TreeBuilder').TreeBuilder;
function SAXTreeBuilder() {
TreeBuilder.call(this);
@ -6429,7 +6429,7 @@ DTD.prototype.revisit = function(treeParser) {
exports.SAXTreeBuilder = SAXTreeBuilder;
},{"../TreeBuilder":6,"util":15}],11:[function(require,module,exports){
},{"../TreeBuilder":6,"util":15}],11:[function(req,module,exports){
/**
* A tree visitor that replays a tree as SAX events.
* @version $Id$
@ -6712,7 +6712,7 @@ NullLexicalHandler.prototype.startEntity = function() {};
exports.TreeParser = TreeParser;
},{}],12:[function(require,module,exports){
},{}],12:[function(req,module,exports){
module.exports = {
"AElig": "\u00C6",
"AElig;": "\u00C6",
@ -8947,10 +8947,10 @@ module.exports = {
"zwnj;": "\u200C"
};
},{}],13:[function(require,module,exports){
},{}],13:[function(req,module,exports){
(function(){// UTILITY
var util = require('util');
var Buffer = require("buffer").Buffer;
var util = req('util');
var Buffer = req("buffer").Buffer;
var pSlice = Array.prototype.slice;
function objectKeys(object) {
@ -9262,7 +9262,7 @@ assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
assert.ifError = function(err) { if (err) {throw err;}};
})()
},{"buffer":17,"util":15}],14:[function(require,module,exports){
},{"buffer":17,"util":15}],14:[function(req,module,exports){
(function(process){if (!process.EventEmitter) process.EventEmitter = function () {};
var EventEmitter = exports.EventEmitter = process.EventEmitter;
@ -9447,9 +9447,9 @@ EventEmitter.prototype.listeners = function(type) {
return this._events[type];
};
})(require("__browserify_process"))
},{"__browserify_process":20}],15:[function(require,module,exports){
var events = require('events');
})(req("__browserify_process"))
},{"__browserify_process":20}],15:[function(req,module,exports){
var events = req('events');
exports.isArray = isArray;
exports.isDate = function(obj){return Object.prototype.toString.call(obj) === '[object Date]'};
@ -9795,7 +9795,7 @@ exports.format = function(f) {
return str;
};
},{"events":14}],16:[function(require,module,exports){
},{"events":14}],16:[function(req,module,exports){
exports.readIEEE754 = function(buffer, offset, isBE, mLen, nBytes) {
var e, m,
eLen = nBytes * 8 - mLen - 1,
@ -9881,8 +9881,8 @@ exports.writeIEEE754 = function(buffer, value, offset, isBE, mLen, nBytes) {
buffer[offset + i - d] |= s * 128;
};
},{}],17:[function(require,module,exports){
(function(){var assert = require('assert');
},{}],17:[function(req,module,exports){
(function(){var assert = req('assert');
exports.Buffer = Buffer;
exports.SlowBuffer = Buffer;
Buffer.poolSize = 8192;
@ -9992,7 +9992,7 @@ Buffer.prototype.base64Write = function (string, offset, length) {
Buffer.prototype.base64Slice = function (start, end) {
var bytes = Array.prototype.slice.apply(this, arguments)
return require("base64-js").fromByteArray(bytes);
return req("base64-js").fromByteArray(bytes);
};
Buffer.prototype.utf8Slice = function () {
@ -10353,7 +10353,7 @@ function asciiToBytes(str) {
}
function base64ToBytes(str) {
return require("base64-js").toByteArray(str);
return req("base64-js").toByteArray(str);
}
function blitBuffer(src, dst, offset, length) {
@ -10618,7 +10618,7 @@ function readFloat(buffer, offset, isBigEndian, noAssert) {
'Trying to read beyond buffer length');
}
return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
return req('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
23, 4);
}
@ -10639,7 +10639,7 @@ function readDouble(buffer, offset, isBigEndian, noAssert) {
'Trying to read beyond buffer length');
}
return require('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
return req('./buffer_ieee754').readIEEE754(buffer, offset, isBigEndian,
52, 8);
}
@ -10923,7 +10923,7 @@ function writeFloat(buffer, value, offset, isBigEndian, noAssert) {
verifIEEE754(value, 3.4028234663852886e+38, -3.4028234663852886e+38);
}
require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
req('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
23, 4);
}
@ -10952,7 +10952,7 @@ function writeDouble(buffer, value, offset, isBigEndian, noAssert) {
verifIEEE754(value, 1.7976931348623157E+308, -1.7976931348623157E+308);
}
require('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
req('./buffer_ieee754').writeIEEE754(buffer, value, offset, isBigEndian,
52, 8);
}
@ -10965,7 +10965,7 @@ Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) {
};
})()
},{"./buffer_ieee754":16,"assert":13,"base64-js":18}],18:[function(require,module,exports){
},{"./buffer_ieee754":16,"assert":13,"base64-js":18}],18:[function(req,module,exports){
(function (exports) {
'use strict';
@ -11051,9 +11051,9 @@ Buffer.prototype.writeDoubleBE = function(value, offset, noAssert) {
module.exports.fromByteArray = uint8ToBase64;
}());
},{}],"./lib/sax/SAXParser.js":[function(require,module,exports){
module.exports=require('DaboPu');
},{}],20:[function(require,module,exports){
},{}],"./lib/sax/SAXParser.js":[function(req,module,exports){
module.exports=req('DaboPu');
},{}],20:[function(req,module,exports){
// shim for using process in browser
var process = module.exports = {};
@ -11109,5 +11109,5 @@ process.chdir = function (dir) {
},{}]},{},["DaboPu"])
;
exports.SAXParser = require('./lib/sax/SAXParser.js').SAXParser;
});
exports.SAXParser = req('./lib/sax/SAXParser.js').SAXParser;
});

View file

@ -43,6 +43,12 @@ var commonAttributes = [
"dropzone",
"hidden",
"id",
"inert",
"itemid",
"itemprop",
"itemref",
"itemscope",
"itemtype",
"lang",
"spellcheck",
"style",
@ -226,24 +232,19 @@ var attributeMap = {
"dialog": ["open"]
};
var allElements = Object.keys(attributeMap);
var elements = Object.keys(attributeMap);
function hasType(token, type) {
var tokenTypes = token.type.split('.');
return type.split('.').every(function(type){
return (tokenTypes.indexOf(type) !== -1);
});
function is(token, type) {
return token.type.lastIndexOf(type + ".xml") > -1;
}
function findTagName(session, pos) {
var iterator = new TokenIterator(session, pos.row, pos.column);
var token = iterator.getCurrentToken();
if (!token || !hasType(token, 'tag') && !(hasType(token, 'text') && token.value.match('/'))){
do {
token = iterator.stepBackward();
} while (token && (hasType(token, 'string') || hasType(token, 'operator') || hasType(token, 'attribute-name') || hasType(token, 'text')));
while (token && !is(token, "tag-name")){
token = iterator.stepBackward();
}
if (token && hasType(token, 'tag-name') && !iterator.stepBackward().value.match('/'))
if (token)
return token.value;
}
@ -260,27 +261,22 @@ var HtmlCompletions = function() {
return [];
// tag name
if (hasType(token, "tag-name") || (token.value == '<' && hasType(token, "text")))
if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open"))
return this.getTagCompletions(state, session, pos, prefix);
// tag attribute
if (hasType(token, 'text') || hasType(token, 'attribute-name'))
if (is(token, "tag-whitespace") || is(token, "attribute-name"))
return this.getAttributeCompetions(state, session, pos, prefix);
return [];
};
this.getTagCompletions = function(state, session, pos, prefix) {
var elements = allElements;
if (prefix) {
elements = elements.filter(function(element){
return element.indexOf(prefix) === 0;
});
}
return elements.map(function(element){
return {
value: element,
meta: "tag"
meta: "tag",
score: Number.MAX_VALUE
};
});
};
@ -293,16 +289,12 @@ var HtmlCompletions = function() {
if (tagName in attributeMap) {
attributes = attributes.concat(attributeMap[tagName]);
}
if (prefix) {
attributes = attributes.filter(function(attribute){
return attribute.indexOf(prefix) === 0;
});
}
return attributes.map(function(attribute){
return {
caption: attribute,
snippet: attribute + '="$0"',
meta: "attribute"
meta: "attribute",
score: Number.MAX_VALUE
};
});
};

View file

@ -62,17 +62,17 @@ var HtmlHighlightRules = function() {
this.addRules({
attributes: [{
include : "space"
include : "tag_whitespace"
}, {
token : "entity.other.attribute-name",
token : "entity.other.attribute-name.xml",
regex : "[-_a-zA-Z0-9:]+"
}, {
token : "keyword.operator.separator",
token : "keyword.operator.attribute-equals.xml",
regex : "=",
push : [{
include: "space"
include: "tag_whitespace"
}, {
token : "string",
token : "string.unquoted.attribute-value.html",
regex : "[^<>='\"`\\s]+",
next : "pop"
}, {
@ -81,33 +81,21 @@ var HtmlHighlightRules = function() {
next : "pop"
}]
}, {
include : "string"
include : "attribute_value"
}],
tag: [{
token : function(start, tag) {
var group = tagMap[tag];
return ["meta.tag.punctuation.begin",
"meta.tag.name" + (group ? "." + group : "")];
return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml",
"meta.tag" + (group ? "." + group : "") + ".tag-name.xml"];
},
regex : "(<)([-_a-zA-Z0-9:]+)",
next: "start_tag_stuff"
}, {
token : function(start, tag) {
var group = tagMap[tag];
return ["meta.tag.punctuation.begin",
"meta.tag.name" + (group ? "." + group : "")];
},
regex : "(</)([-_a-zA-Z0-9:]+)",
next: "end_tag_stuff"
regex : "(</?)([-_a-zA-Z0-9:]+)",
next: "tag_stuff"
}],
start_tag_stuff: [
tag_stuff: [
{include : "attributes"},
{token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}
{token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
],
end_tag_stuff: [
{include : "space"},
{token : "meta.tag.punctuation.end", regex : ">", next : "start"}
]
});
this.embedTagRules(CssHighlightRules, "css-", "style");

File diff suppressed because one or more lines are too long

View file

@ -8,7 +8,7 @@ var Tokenizer = require("../tokenizer").Tokenizer;
var LuaPageHighlightRules = require("./luapage_highlight_rules").LuaPageHighlightRules;
var Mode = function() {
this.HighlightRules = LuaPageHighlightRules;
HtmlMode.call(this);
this.HighlightRules = LuaPageHighlightRules;
this.createModeDelegates({

View file

@ -3,7 +3,7 @@
*
* 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
@ -14,7 +14,7 @@
* * 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
@ -42,21 +42,21 @@ var MarkdownFoldMode = require("./folding/markdown").FoldMode;
var Mode = function() {
this.HighlightRules = MarkdownHighlightRules;
this.createModeDelegates({
"js-": JavaScriptMode,
"xml-": XmlMode,
"html-": HtmlMode
});
this.foldingRules = new MarkdownFoldMode();
};
oop.inherits(Mode, TextMode);
(function() {
this.type = "text";
this.lineCommentStart = ">";
this.blockComment = {start: "<!--", end: "-->"};
this.getNextLineIndent = function(state, line, tab) {
if (state == "listblock") {
var match = /^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(line);

View file

@ -46,7 +46,7 @@ var escaped = function(ch) {
function github_embed(tag, prefix) {
return { // Github style block
token : "support.function",
regex : "^```" + tag + "\\s*$",
regex : "^\\s*```" + tag + "\\s*$",
push : prefix + "start"
};
}
@ -79,7 +79,7 @@ var MarkdownHighlightRules = function() {
github_embed("css", "csscode-"),
{ // Github style block
token : "support.function",
regex : "^```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$",
regex : "^\\s*```\\s*\\S*(?:{.*?\\})?\\s*$",
next : "githubblock"
}, { // block quote
token : "string.blockquote",
@ -164,11 +164,15 @@ var MarkdownHighlightRules = function() {
next : "listblock-start"
}, {
include : "basic", noEscape: true
}, { // Github style block
token : "support.function",
regex : "^\\s*```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$",
next : "githubblock"
}, {
defaultToken : "list" //do not use markup.list to allow stling leading `*` differntly
} ],
"blockquote" : [ { // BLockquotes only escape on blank lines.
"blockquote" : [ { // Blockquotes only escape on blank lines.
token : "empty_line",
regex : "^\\s*$",
next : "start"
@ -184,7 +188,7 @@ var MarkdownHighlightRules = function() {
"githubblock" : [ {
token : "support.function",
regex : "^```",
regex : "^\\s*```",
next : "start"
}, {
token : "support.function",
@ -194,25 +198,25 @@ var MarkdownHighlightRules = function() {
this.embedRules(JavaScriptHighlightRules, "jscode-", [{
token : "support.function",
regex : "^```",
regex : "^\\s*```",
next : "pop"
}]);
this.embedRules(HtmlHighlightRules, "htmlcode-", [{
token : "support.function",
regex : "^```",
regex : "^\\s*```",
next : "pop"
}]);
this.embedRules(CssHighlightRules, "csscode-", [{
token : "support.function",
regex : "^```",
regex : "^\\s*```",
next : "pop"
}]);
this.embedRules(XmlHighlightRules, "xmlcode-", [{
token : "support.function",
regex : "^```",
regex : "^\\s*```",
next : "pop"
}]);

View file

@ -4810,6 +4810,16 @@ PHP.Parser.prototype.Node_Expr_BitwiseOr = function() {
};
PHP.Parser.prototype.Node_Expr_BitwiseXor = function() {
return {
type: "Node_Expr_BitwiseXor",
left: arguments[ 0 ],
right: arguments[ 1 ],
attributes: arguments[ 2 ]
};
};
PHP.Parser.prototype.Node_Expr_BitwiseNot = function() {
return {
type: "Node_Expr_BitwiseNot",

View file

@ -49,6 +49,7 @@ var RCodeModel = require("mode/r_code_model").RCodeModel;
*/
var Mode = function(doc, session) {
HtmlMode.call(this);
this.$session = session;
this.HighlightRules = RHtmlHighlightRules;

View file

@ -63,7 +63,7 @@ oop.inherits(Mode, TextMode);
if (state == "start") {
var match = line.match(/^.*[\{\(\[]\s*$/);
var startingClassOrMethod = line.match(/^\s*(class|def)\s.*$/);
var startingClassOrMethod = line.match(/^\s*(class|def|module)\s.*$/);
var startingDoBlock = line.match(/.*do(\s*|\s+\|.*\|\s*)$/);
var startingConditional = line.match(/^\s*(if|else)\s*/)
if (match || startingClassOrMethod || startingDoBlock || startingConditional) {

View file

@ -35,16 +35,10 @@ var oop = require("../lib/oop");
var HtmlMode = require("./html").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var SmartyHighlightRules = require("./smarty_highlight_rules").SmartyHighlightRules;
var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;
var HtmlFoldMode = require("./folding/html").FoldMode;
var Mode = function() {
HtmlMode.call(this);
this.HighlightRules = SmartyHighlightRules;
this.$behaviour = new HtmlBehaviour();
this.foldingRules = new HtmlFoldMode();
};
oop.inherits(Mode, HtmlMode);

View file

@ -114,9 +114,9 @@ var SmartyHighlightRules = function() {
var smartyStart = smartyRules.start;
["start", "qqstring_inner", "qstring_inner", "attributes", "cdata"].forEach(function(x) {
this.$rules[x].unshift.apply(this.$rules[x], smartyStart);
}, this);
for (var rule in this.$rules) {
this.$rules[rule].unshift.apply(this.$rules[rule], smartyStart);
}
Object.keys(smartyRules).forEach(function(x) {
if (!this.$rules[x])

View file

@ -49,7 +49,7 @@ var Mode = function() {
"js-": JavaScriptMode
});
this.foldingRules = new MixedFoldMode(new XmlFoldMode({}), {
this.foldingRules = new MixedFoldMode(new XmlFoldMode(), {
"js-": new CStyleFoldMode()
});
};

View file

@ -32,28 +32,16 @@ define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var JavaScriptMode = require("./javascript").Mode;
var CssMode = require("./css").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var HtmlMode = require("./html").Mode;
var TwigHighlightRules = require("./twig_highlight_rules").TwigHighlightRules;
var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;
var HtmlFoldMode = require("./folding/html").FoldMode;
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
var Mode = function() {
HtmlMode.call(this);
this.HighlightRules = TwigHighlightRules;
this.$outdent = new MatchingBraceOutdent();
this.$behaviour = new HtmlBehaviour();
this.createModeDelegates({
"js-": JavaScriptMode,
"css-": CssMode
});
this.foldingRules = new HtmlFoldMode();
};
oop.inherits(Mode, TextMode);
oop.inherits(Mode, HtmlMode);
(function() {
this.blockComment = {start: "{#", end: "#}"};

View file

@ -37,18 +37,17 @@ define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var TextMode = require("./text").Mode;
var HtmlMode = require("./html").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var VelocityHighlightRules = require("./velocity_highlight_rules").VelocityHighlightRules;
var FoldMode = require("./folding/velocity").FoldMode;
var HtmlBehaviour = require("./behaviour/html").HtmlBehaviour;
var Mode = function() {
HtmlMode.call(this);
this.HighlightRules = VelocityHighlightRules;
this.foldingRules = new FoldMode();
this.$behaviour = new HtmlBehaviour();
};
oop.inherits(Mode, TextMode);
oop.inherits(Mode, HtmlMode);
(function() {
this.lineCommentStart = "##";

View file

@ -32,6 +32,7 @@ define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var lang = require("../lib/lang");
var TextMode = require("./text").Mode;
var Tokenizer = require("../tokenizer").Tokenizer;
var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules;
@ -47,7 +48,9 @@ var Mode = function() {
oop.inherits(Mode, TextMode);
(function() {
this.voidElements = lang.arrayToMap([]);
this.blockComment = {start: "<!--", end: "-->"};
this.$id = "ace/mode/xml";

View file

@ -38,57 +38,72 @@ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
var XmlHighlightRules = function(normalize) {
this.$rules = {
start : [
{token : "punctuation.string.begin", regex : "<\\!\\[CDATA\\[", next : "cdata"},
{token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"},
{
token : ["punctuation.instruction.begin", "keyword.instruction"],
regex : "(<\\?)(xml)(?=[\\s])", next : "xml_declaration"
token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"],
regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true
},
{
token : ["punctuation.instruction.begin", "keyword.instruction"],
regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "instruction"
token : ["punctuation.instruction.xml", "keyword.instruction.xml"],
regex : "(<\\?)([-_a-zA-Z0-9]+)", next : "processing_instruction",
},
{token : "comment", regex : "<\\!--", next : "comment"},
{token : "comment.xml", regex : "<\\!--", next : "comment"},
{
token : ["punctuation.doctype.begin", "meta.tag.doctype"],
regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype"
token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"],
regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true
},
{include : "tag"},
{include : "reference"}
{token : "text.end-tag-open.xml", regex: "</"},
{token : "text.tag-open.xml", regex: "<"},
{include : "reference"},
{defaultToken : "text.xml"}
],
xml_declaration : [
{include : "attributes"},
{include : "instruction"}
],
xml_decl : [{
token : "entity.other.attribute-name.decl-attribute-name.xml",
regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"
}, {
token : "keyword.operator.decl-attribute-equals.xml",
regex : "="
}, {
include: "whitespace"
}, {
include: "string"
}, {
token : "punctuation.xml-decl.xml",
regex : "\\?>",
next : "start"
}],
instruction : [
{token : "punctuation.instruction.end", regex : "\\?>", next : "start"}
processing_instruction : [
{token : "punctuation.instruction.xml", regex : "\\?>", next : "start"},
{defaultToken : "instruction.xml"}
],
doctype : [
{include : "space"},
{include : "whitespace"},
{include : "string"},
{token : "punctuation.doctype.end", regex : ">", next : "start"},
{token : "xml-pe", regex : "[-_a-zA-Z0-9:]+"},
{token : "punctuation.begin", regex : "\\[", push : "declarations"}
{token : "xml-pe.doctype.xml", regex : ">", next : "start"},
{token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"},
{token : "punctuation.int-subset", regex : "\\[", push : "int_subset"}
],
declarations : [{
token : "text",
int_subset : [{
token : "text.xml",
regex : "\\s+"
}, {
token: "punctuation.end",
token: "punctuation.int-subset.xml",
regex: "]",
next: "pop"
}, {
token : ["punctuation.begin", "keyword"],
token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"],
regex : "(<\\!)([-_a-zA-Z0-9]+)",
push : [{
token : "text",
regex : "\\s+"
},
{
token : "punctuation.end",
token : "punctuation.markup-decl.xml",
regex : ">",
next : "pop"
},
@ -96,75 +111,88 @@ var XmlHighlightRules = function(normalize) {
}],
cdata : [
{token : "string.end", regex : "\\]\\]>", next : "start"},
{token : "text", regex : "\\s+"},
{token : "text", regex : "(?:[^\\]]|\\](?!\\]>))+"}
{token : "string.cdata.xml", regex : "\\]\\]>", next : "start"},
{token : "text.xml", regex : "\\s+"},
{token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"}
],
comment : [
{token : "comment", regex : "-->", next : "start"},
{defaultToken : "comment"}
],
tag : [{
token : ["meta.tag.punctuation.begin", "meta.tag.name"],
regex : "(<)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",
next: [
{include : "attributes"},
{token : "meta.tag.punctuation.end", regex : "/?>", next : "start"}
]
}, {
token : ["meta.tag.punctuation.begin", "meta.tag.name"],
regex : "(</)((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",
next: [
{include : "space"},
{token : "meta.tag.punctuation.end", regex : ">", next : "start"}
]
}],
space : [
{token : "text", regex : "\\s+"}
{token : "comment.xml", regex : "-->", next : "start"},
{defaultToken : "comment.xml"}
],
reference : [{
token : "constant.language.escape",
token : "constant.language.escape.reference.xml",
regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
}, {
token : "text", regex : "&"
}],
attr_reference : [{
token : "constant.language.escape.reference.attribute-value.xml",
regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
}],
tag : [{
token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"],
regex : "(?:(<)|(</))((?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+)",
next: [
{include : "attributes"},
{token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"}
]
}],
tag_whitespace : [
{token : "text.tag-whitespace.xml", regex : "\\s+"}
],
// for doctype and processing instructions
whitespace : [
{token : "text.whitespace.xml", regex : "\\s+"}
],
// for doctype and processing instructions
string: [{
token : "string",
token : "string.xml",
regex : "'",
push : "qstring_inner"
push : [
{token : "string.xml", regex: "'", next: "pop"},
{defaultToken : "string.xml"}
]
}, {
token : "string",
token : "string.xml",
regex : '"',
push : "qqstring_inner"
push : [
{token : "string.xml", regex: '"', next: "pop"},
{defaultToken : "string.xml"}
]
}],
qstring_inner: [
{token : "string", regex: "'", next: "pop"},
{include : "reference"},
{defaultToken : "string"}
],
qqstring_inner: [
{token : "string", regex: '"', next: "pop"},
{include : "reference"},
{defaultToken : "string"}
],
attributes: [{
token : "entity.other.attribute-name",
token : "entity.other.attribute-name.xml",
regex : "(?:[-_a-zA-Z0-9]+:)?[-_a-zA-Z0-9]+"
}, {
token : "keyword.operator.separator",
token : "keyword.operator.attribute-equals.xml",
regex : "="
}, {
include : "space"
include: "tag_whitespace"
}, {
include : "string"
include: "attribute_value"
}],
attribute_value: [{
token : "string.attribute-value.xml",
regex : "'",
push : [
{token : "string.attribute-value.xml", regex: "'", next: "pop"},
{include : "attr_reference"},
{defaultToken : "string.attribute-value.xml"}
]
}, {
token : "string.attribute-value.xml",
regex : '"',
push : [
{token : "string.attribute-value.xml", regex: '"', next: "pop"},
{include : "attr_reference"},
{defaultToken : "string.attribute-value.xml"}
]
}]
};
@ -177,18 +205,17 @@ var XmlHighlightRules = function(normalize) {
this.embedTagRules = function(HighlightRules, prefix, tag){
this.$rules.tag.unshift({
token : ["meta.tag.punctuation.begin", "meta.tag.name." + tag],
token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
regex : "(<)(" + tag + ")",
next: [
{include : "space"},
{include : "attributes"},
{token : "meta.tag.punctuation.end", regex : "/?>", next : prefix + "start"}
{token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"}
]
});
this.$rules[tag + "-end"] = [
{include : "space"},
{token : "meta.tag.punctuation.end", regex : ">", next: "start",
{include : "attributes"},
{token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start",
onMatch : function(value, currentState, stack) {
stack.splice(0);
return this.token;
@ -196,14 +223,14 @@ var XmlHighlightRules = function(normalize) {
]
this.embedRules(HighlightRules, prefix, [{
token: ["meta.tag.punctuation.begin", "meta.tag.name." + tag],
token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"],
regex : "(</)(" + tag + ")",
next: tag + "-end"
}, {
token: "string.begin",
token: "string.cdata.xml",
regex : "<\\!\\[CDATA\\["
}, {
token: "string.end",
token: "string.cdata.xml",
regex : "\\]\\]>"
}]);
};

View file

@ -51,7 +51,7 @@ module.exports = {
assert.ok(tokenizer instanceof Tokenizer);
var tokens = tokenizer.getLineTokens("<juhu>", "start").tokens;
assert.equal("meta.tag.punctuation.begin", tokens[0].type);
assert.equal("meta.tag.punctuation.tag-open.xml", tokens[0].type);
},
"test: toggle comment lines should not do anything" : function() {

View file

@ -86,9 +86,6 @@ var YamlHighlightRules = function() {
}, {
token : "constant.language.boolean",
regex : "(?:true|false|TRUE|FALSE|True|False|yes|no)\\b"
}, {
token : "invalid.illegal", // comments are not allowed
regex : "\\/\\/.*$"
}, {
token : "paren.lparen",
regex : "[[({]"

View file

@ -72,8 +72,7 @@ function DefaultHandlers(mouseHandler) {
var selectionEmpty = selectionRange.isEmpty();
if (selectionEmpty) {
editor.moveCursorToPosition(pos);
editor.selection.clearSelection();
editor.selection.moveToPosition(pos);
}
// 2: contextmenu, 1: linux paste
@ -93,6 +92,7 @@ function DefaultHandlers(mouseHandler) {
}
}
this.captureMouse(ev);
if (!inSelection || this.$clickSelection || ev.getShiftKey() || editor.inMultiSelectMode) {
// Directly pick STATE_SELECT, since the user is not clicking inside
// a selection.
@ -101,7 +101,6 @@ function DefaultHandlers(mouseHandler) {
this.mousedownEvent.time = Date.now();
this.startSelect(pos);
}
this.captureMouse(ev);
return ev.preventDefault();
};
@ -114,8 +113,7 @@ function DefaultHandlers(mouseHandler) {
editor.selection.selectToPosition(pos);
}
else if (!this.$clickSelection) {
editor.moveCursorToPosition(pos);
editor.selection.clearSelection();
editor.selection.moveToPosition(pos);
}
if (editor.renderer.scroller.setCapture) {
editor.renderer.scroller.setCapture();

View file

@ -32,7 +32,6 @@ define(function(require, exports, module) {
var event = require("../lib/event");
// mouse
function isSamePoint(p1, p2) {
return p1.row == p2.row && p1.column == p2.column;
@ -51,7 +50,7 @@ function onMouseDown(e) {
}
if (!ctrl && !alt) {
if (button == 0 && e.editor.inMultiSelectMode)
if (button === 0 && e.editor.inMultiSelectMode)
e.editor.exitMultiSelectMode();
return;
}
@ -79,8 +78,7 @@ function onMouseDown(e) {
return;
screenCursor = newCursor;
editor.selection.moveCursorToPosition(cursor);
editor.selection.clearSelection();
editor.selection.moveToPosition(cursor);
editor.renderer.scrollCursorIntoView();
editor.removeSelectionMarkers(rectSel);
@ -95,7 +93,7 @@ function onMouseDown(e) {
if (ctrl && !shift && !alt && button == 0) {
if (ctrl && !alt && !shift && button === 0) {
if (!isMultiSelect && inSelection)
return; // dragging
@ -122,7 +120,7 @@ function onMouseDown(e) {
editor.$blockScrolling--;
});
} else if (alt && button == 0) {
} else if (alt && button === 0) {
e.stop();
if (isMultiSelect && !ctrl)
@ -135,8 +133,7 @@ function onMouseDown(e) {
screenAnchor = session.documentToScreenPosition(selection.lead);
blockSelect();
} else {
selection.moveCursorToPosition(pos);
selection.clearSelection();
selection.moveToPosition(pos);
}

View file

@ -437,6 +437,7 @@ var Editor = require("./editor").Editor;
this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec);
this.renderer.updateCursor();
this.renderer.updateBackMarkers();
this._emit("changeSelection");
};
this.$onMultiSelectExec = function(e) {
@ -487,9 +488,10 @@ var Editor = require("./editor").Editor;
i--;
}
tmpSel.fromOrientedRange(rangeList.ranges[i]);
tmpSel.id = rangeList.ranges[i].marker;
this.selection = session.selection = tmpSel;
var cmdResult = cmd.exec(this, args || {});
if (!result == undefined)
if (result !== undefined)
result = cmdResult;
tmpSel.toOrientedRange(rangeList.ranges[i]);
}

View file

@ -112,12 +112,15 @@ oop.inherits(Occur, Search);
occurSession.$occur = this;
occurSession.$occurMatchingLines = found;
editor.setSession(occurSession);
this.$useEmacsStyleLineStart = this.$originalSession.$useEmacsStyleLineStart;
occurSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;
this.highlight(occurSession, options.re);
occurSession._emit('changeBackMarker');
}
this.displayOriginalContent = function(editor) {
editor.setSession(this.$originalSession);
this.$originalSession.$useEmacsStyleLineStart = this.$useEmacsStyleLineStart;
}
/**

View file

@ -298,6 +298,27 @@ var Selection = function(session) {
});
};
/**
* Moves the selection cursor to the indicated row and column.
* @param {Number} row The row to select to
* @param {Number} column The column to select to
*
**/
this.moveTo = function(row, column) {
this.clearSelection();
this.moveCursorTo(row, column);
};
/**
* Moves the selection cursor to the row and column indicated by `pos`.
* @param {Object} pos An object containing the row and column
**/
this.moveToPosition = function(pos) {
this.clearSelection();
this.moveCursorToPosition(pos);
};
/**
*
* Moves the selection up one row.
@ -868,6 +889,27 @@ var Selection = function(session) {
return range;
}
/**
* Saves the current cursor position and calls `func` that can change the cursor
* postion. The result is the range of the starting and eventual cursor position.
* Will reset the cursor position.
* @param {Function} The callback that should change the cursor position
* @returns {Range}
*
**/
this.getRangeOfMovements = function(func) {
var start = this.getCursor();
try {
func.call(null, this);
var end = this.getCursor();
return Range.fromPoints(start,end);
} catch(e) {
return Range.fromPoints(start,start);
} finally {
this.moveCursorToPosition(start);
}
}
this.toJSON = function() {
if (this.rangeCount) {
var data = this.ranges.map(function(r) {

File diff suppressed because it is too large Load diff

View file

@ -114,7 +114,6 @@ var Tokenizer = function(rules) {
// makes property access faster
if (!rule.onMatch)
rule.onMatch = null;
rule.__proto__ = null;
}
splitterRurles.forEach(function(rule) {

View file

@ -33,7 +33,6 @@ define(function(require, exports, module) {
var oop = require("./lib/oop");
var dom = require("./lib/dom");
var useragent = require("./lib/useragent");
var config = require("./config");
var GutterLayer = require("./layer/gutter").Gutter;
var MarkerLayer = require("./layer/marker").Marker;
@ -42,6 +41,7 @@ var CursorLayer = require("./layer/cursor").Cursor;
var HScrollBar = require("./scrollbar").HScrollBar;
var VScrollBar = require("./scrollbar").VScrollBar;
var RenderLoop = require("./renderloop").RenderLoop;
var FontMetrics = require("./layer/font_metrics").FontMetrics;
var EventEmitter = require("./lib/event_emitter").EventEmitter;
var editorCss = require("./requirejs/text!./css/editor.css");
@ -125,10 +125,12 @@ var VirtualRenderer = function(container, theme) {
column : 0
};
this.$textLayer.addEventListener("changeCharacterSize", function() {
this.$fontMetrics = new FontMetrics(this.container, 500);
this.$textLayer.$setFontMetrics(this.$fontMetrics);
this.$textLayer.addEventListener("changeCharacterSize", function(e) {
_self.updateCharacterSize();
_self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);
_self._signal("changeCharacterSize");
_self._signal("changeCharacterSize", e);
});
this.$size = {
@ -150,7 +152,8 @@ var VirtualRenderer = function(container, theme) {
minHeight : 1,
maxHeight : 1,
offset : 0,
height : 1
height : 1,
gutterOffset: 1
};
this.scrollMargin = {
@ -224,8 +227,13 @@ var VirtualRenderer = function(container, theme) {
* Associates the renderer with an [[EditSession `EditSession`]].
**/
this.setSession = function(session) {
if (this.session)
this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode);
this.session = session;
if (!session)
return;
if (this.scrollMargin.top && session.getScrollTop() <= 0)
session.setScrollTop(-this.scrollMargin.top);
@ -235,6 +243,11 @@ var VirtualRenderer = function(container, theme) {
this.$gutterLayer.setSession(session);
this.$textLayer.setSession(session);
this.$loop.schedule(this.CHANGE_FULL);
this.session.$setFontMetrics(this.$fontMetrics);
this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);
this.onChangeNewLineMode()
this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode);
};
/**
@ -268,6 +281,11 @@ var VirtualRenderer = function(container, theme) {
this.$loop.schedule(this.CHANGE_LINES);
};
this.onChangeNewLineMode = function() {
this.$loop.schedule(this.CHANGE_TEXT);
this.$textLayer.$updateEolChar();
};
this.onChangeTabSize = function() {
this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);
this.$textLayer.onChangeTabSize();
@ -702,7 +720,7 @@ var VirtualRenderer = function(container, theme) {
sm.v = sm.top + sm.bottom;
sm.h = sm.left + sm.right;
if (sm.top && this.scrollTop <= 0 && this.session)
this.session.setScrollTop(sm.top);
this.session.setScrollTop(-sm.top);
this.updateFull();
};
@ -984,7 +1002,7 @@ var VirtualRenderer = function(container, theme) {
minHeight : minHeight,
maxHeight : maxHeight,
offset : offset,
gutterOffset : Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight),
gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)),
height : this.$size.scrollerHeight
};
@ -1605,6 +1623,7 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", {
showGutter: {
set: function(show){
this.$gutter.style.display = show ? "block" : "none";
this.$loop.schedule(this.CHANGE_FULL);
this.onGutterResize();
},
initialValue: true

View file

@ -42,7 +42,7 @@ window.normalizeModule = function(parentId, moduleName) {
window.require = function(parentId, id) {
if (!id) {
id = parentId
id = parentId;
parentId = null;
}
if (!id.charAt)
@ -81,14 +81,14 @@ window.define = function(id, deps, factory) {
}
} else if (arguments.length == 1) {
factory = id;
deps = []
deps = [];
id = window.require.id;
}
if (!deps.length)
// If there is no dependencies, we inject 'require', 'exports' and
// 'module' as dependencies, to provide CommonJS compatibility.
deps = ['require', 'exports', 'module']
deps = ['require', 'exports', 'module'];
if (id.indexOf("text!") === 0)
return;
@ -105,12 +105,12 @@ window.define = function(id, deps, factory) {
switch(dep) {
// Because 'require', 'exports' and 'module' aren't actual
// dependencies, we must handle them seperately.
case 'require': return req
case 'exports': return module.exports
case 'module': return module
case 'require': return req;
case 'exports': return module.exports;
case 'module': return module;
// But for all other dependencies, we can just go ahead and
// require them.
default: return req(dep)
default: return req(dep);
}
}));
if (returnExports)
@ -119,11 +119,11 @@ window.define = function(id, deps, factory) {
}
};
};
window.define.amd = {}
window.define.amd = {};
window.initBaseUrls = function initBaseUrls(topLevelNamespaces) {
require.tlns = topLevelNamespaces;
}
};
window.initSender = function initSender() {
@ -155,10 +155,10 @@ window.initSender = function initSender() {
}).call(Sender.prototype);
return new Sender();
}
};
window.main = null;
window.sender = null;
var main = window.main = null;
var sender = window.sender = null;
window.onmessage = function(e) {
var msg = e.data;
@ -171,9 +171,9 @@ window.onmessage = function(e) {
else if (msg.init) {
initBaseUrls(msg.tlns);
require("ace/lib/es5-shim");
sender = initSender();
sender = window.sender = initSender();
var clazz = require(msg.module)[msg.classname];
main = new clazz(sender);
main = window.main = new clazz(sender);
}
else if (msg.event && sender) {
sender._signal(msg.event, msg.data);

View file

@ -32,6 +32,7 @@ define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var net = require("../lib/net");
var EventEmitter = require("../lib/event_emitter").EventEmitter;
var config = require("../config");
@ -183,16 +184,17 @@ var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {
};
this.$workerBlob = function(workerUrl) {
var script = 'importScripts("' + workerUrl + '");';
// workerUrl can be protocol relative
// importScripts only takes fully qualified urls
var script = "importScripts('" + net.qualifyURL( workerUrl ) + "');";
try {
var blob = new Blob([script], {'type': 'application/javascript'});
return new Blob([script], {"type": "application/javascript"});
} catch (e) { // Backwards-compatibility
var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
var blobBuilder = new BlobBuilder();
blobBuilder.append(script);
blob = blobBuilder.getBlob('application/javascript');
return blobBuilder.getBlob("application/javascript");
}
return blob;
};
}).call(WorkerClient.prototype);
@ -206,6 +208,7 @@ var UIWorkerClient = function(topLevelNamespaces, mod, classname) {
this.messageBuffer = [];
var main = null;
var emitSync = false;
var sender = Object.create(EventEmitter);
var _self = this;
@ -213,8 +216,14 @@ var UIWorkerClient = function(topLevelNamespaces, mod, classname) {
this.$worker.terminate = function() {};
this.$worker.postMessage = function(e) {
_self.messageBuffer.push(e);
main && setTimeout(processNext);
if (main) {
if (emitSync)
setTimeout(processNext);
else
processNext();
}
};
this.setEmitSync = function(val) { emitSync = val };
var processNext = function() {
var msg = _self.messageBuffer.shift();