|
|
// highly adapted for codemiror jshint
|
|
|
|
|
|
(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) {
|
|
|
// Find the token at the cursor
|
|
|
var cur = editor.getCursor(), token = editor.getTokenAt(cur), tprop = token;
|
|
|
// If it's not a 'word-style' token, ignore the token.
|
|
|
// If it is a property, find out what it is a property of.
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
// find all 'words' of current cell
|
|
|
function getAllTokens(editor)
|
|
|
{
|
|
|
var found = [];
|
|
|
// get all text remove and split it before dot and at space
|
|
|
// keep the dot for completing token that also start with dot
|
|
|
var candidates = editor.getValue()
|
|
|
.replace(/[.]/g," .")
|
|
|
.replace(/[ ]/g,"\n")
|
|
|
.split('\n');
|
|
|
// append to arry if not already (the function)
|
|
|
function maybeAdd(str) {
|
|
|
if (!arrayContains(found, str)) found.push(str);
|
|
|
}
|
|
|
// append to arry if not already
|
|
|
// (here we do it )
|
|
|
for( var c in candidates )
|
|
|
{
|
|
|
if(candidates[c].length >= 1){
|
|
|
maybeAdd(candidates[c]);}
|
|
|
}
|
|
|
return found;
|
|
|
}
|
|
|
|
|
|
function getCompletions(token,editor)
|
|
|
{
|
|
|
var candidates = getAllTokens(editor);
|
|
|
// filter all token that have a common start (but nox exactly) the lenght of the current token
|
|
|
var lambda = function(x){
|
|
|
return (x.indexOf(token.string)==0 && x != token.string)
|
|
|
};
|
|
|
var filterd = candidates.filter(lambda);
|
|
|
return filterd;
|
|
|
}
|
|
|
})();
|
|
|
|