8
8
< link rel ="stylesheet " href ="../addon/hint/show-hint.css ">
9
9
< script src ="../lib/codemirror.js "> </ script >
10
10
< script src ="../addon/hint/show-hint.js "> </ script >
11
- < script src ="../addon/hint/anyword-hint.js "> </ script >
11
+ < script src ="../addon/hint/anyword-hint.js " id = anyword > </ script >
12
12
< script src ="../mode/javascript/javascript.js "> </ script >
13
13
< div id =nav >
14
14
< a href ="https://codemirror.net "> < h1 > CodeMirror</ h1 > < img id =logo src ="../doc/logo.png "> </ a >
@@ -29,33 +29,31 @@ <h2>Any Word Completion Demo</h2>
29
29
(function() {
30
30
"use strict";
31
31
32
- var WORD = /[\w$]+/g , RANGE = 500;
32
+ var WORD = /[\w$]+/, RANGE = 500;
33
33
34
34
CodeMirror.registerHelper("hint", "anyword", function(editor, options) {
35
35
var word = options && options.word || WORD;
36
36
var range = options && options.range || RANGE;
37
37
var cur = editor.getCursor(), curLine = editor.getLine(cur.line);
38
- var start = cur.ch, end = start;
39
- while (end < curLine .length && word.test(curLine.charAt(end))) ++end;
38
+ var end = cur.ch, start = end;
40
39
while (start && word.test(curLine.charAt(start - 1))) --start;
41
40
var curWord = start != end && curLine.slice(start, end);
42
41
43
- var list = [], seen = {};
44
- function scan(dir) {
45
- var line = cur.line, end = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;
46
- for (; line ! = end; line + = dir) {
42
+ var list = options && options.list || [], seen = {};
43
+ var re = new RegExp(word.source, "g");
44
+ for (var dir = -1; dir < = 1; dir += 2) {
45
+ var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir;
46
+ for (; line != endLine; line += dir) {
47
47
var text = editor.getLine(line), m;
48
- word.lastIndex = 0;
49
- while (m = word.exec(text)) {
50
- if ((!curWord || m[0].indexOf (curWord) == 0) && !seen. hasOwnProperty( m[0])) {
48
+ while (m = re.exec(text)) {
49
+ if (line == cur.line && m[0] === curWord) continue;
50
+ if ((!curWord || m[0].lastIndexOf (curWord, 0 ) == 0) && !Object.prototype. hasOwnProperty.call(seen, m[0])) {
51
51
seen[m[0]] = true;
52
52
list.push(m[0]);
53
53
}
54
54
}
55
55
}
56
56
}
57
- scan(-1);
58
- scan(1);
59
57
return {list: list, from: CodeMirror.Pos(cur.line, start), to: CodeMirror.Pos(cur.line, end)};
60
58
});
61
59
})();
0 commit comments