(function () {
"use strict";
function forEach(arr, f) {
for (var i = 0, e = arr.length; i < e; ++i) f(arr[i]);
}
function arrayContains(arr, item) {
if (!Array.prototype.indexOf) {
var i = arr.length;
while (i--) {
if (arr[i] === item) {
return true;
}
}
return false;
}
return arr.indexOf(item) != -1;
}
CodeMirror.contextHint = function (editor) {
var cur = editor.getCursor(),
token = editor.getTokenAt(cur),
tprop = token;
var list = new Array();
var clist = getCompletions(token, editor);
for (var i = 0; i < clist.length; i++) {
list.push({
str: clist[i],
type: "context",
from: {
line: cur.line,
ch: token.start
},
to: {
line: cur.line,
ch: token.end
}
})
}
return list;
}
var getAllTokens = function (editor) {
var found = [];
function maybeAdd(str) {
if (!arrayContains(found, str)) found.push(str);
}
var lineCount = editor.lineCount();
for (var l = 0; l < lineCount; l++) {
var line = editor.getLine(l);
for (var c = 1; c < line.length; c++) {
var tk = editor.getTokenAt({
line: l,
ch: c
});
if (tk.className != null) {
maybeAdd(tk.string);
}
c = tk.end;
}
}
return found;
}
function getCompletions(token, editor) {
var candidates = getAllTokens(editor);
var lambda = function (x) {
return (x.indexOf(token.string) == 0 && x != token.string)
};
var filterd = candidates.filter(lambda);
return filterd;
}
})();