diff --git a/Frontend Angular 4/src/app/layout/matefun/codemirror/matefun-mode-EN.js b/Frontend Angular 4/src/app/layout/matefun/codemirror/matefun-mode-EN.js index 77ba8dbc7a2603edee9d09554630a7322d566aeb..ca4816feef64e79ffbb2801dfeb5f646c0c69269 100644 --- a/Frontend Angular 4/src/app/layout/matefun/codemirror/matefun-mode-EN.js +++ b/Frontend Angular 4/src/app/layout/matefun/codemirror/matefun-mode-EN.js @@ -27,35 +27,15 @@ const hintWords = require('./hint_words'); - // var anyWord = CodeMirror.hint.anyword; - // CodeMirror.hint.anyword = function(cm) { - // var cur = cm.getCursor(), token = cm.getTokenAt(cur) - // var term, from = CodeMirror.Pos(cur.line, token.start), to = cur - // if (token.start < cur.ch && /[\w\_]/.test(token.string.charAt(cur.ch - token.start - 1))) { - // term = token.string.substr(0, cur.ch - token.start) - // } else { - // term = "" - // from = cur - // } - // var inner = anyWord(cm, { word: /[\w$\_]+/ }) || {from: from, to: to, list: []}; - - // var filtered_words = hintWords.EN_words().filter(w => w.indexOf(term) === 0); - - // for(var i= 0; i < filtered_words.length; i++){ - // if (inner.list.indexOf(filtered_words[i]) === -1) - // inner.list.push(filtered_words[i]); - // } - - // return inner; - // }; - var WORD = /[\w$]+/; - var SET = /set\s*([\w\_]*?)\s*\=/; + var SET = /set\s*([\w\_\d]*?)\s*\=/; var DOM = /\:\:/; - var FUNS = /([\w\_]*)\s*\:\:/; - var FUN = /([\w\_]+)\s*\(([\,\w\_\s]*)\)\s*\=/; - var ENUMS = /set\s*[\w\_]*\s*\=\s*\{(.*?)\}/; + var FUNS = /([\w\_\d]*)\s*\:\:/; + var FUN = /([\w\_\d]+)\s*\(([\,\w\_\s\d]*)\)\s*\=/; + var ENUMS = /set\s*[\w\_\d]*\s*\=\s*\{(.*?)\}/; + var WRITING_SET = /set\s/; + var WRITING_COMMENT = /\{\-/; var RANGE = 500; @@ -68,90 +48,97 @@ var curWord = start != end && curLine.slice(start, end); var list = options && options.list || [], seen = {}; - - // sets + var previous_part = curLine.slice(0, start); - var re_dom = new RegExp(DOM.source, "g"); - if (re_dom.exec(previous_part)){ - var re_sets = new RegExp(SET.source, "g"); - - for (var dir = -1; dir <= 1; dir += 2) { - var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; - for (; line != endLine; line += dir) { - var text = editor.getLine(line), m; - while (m = re_sets.exec(text)) { - if (line == cur.line && m[1] === curWord) continue; - if ((!curWord || m[1].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[1])) { - seen[m[1]] = true; - list.push(m[1]); + + var re_w_s = new RegExp(WRITING_SET.source, "g"); + var re_w_c = new RegExp(WRITING_COMMENT.source, "g"); + + if (!re_w_s.exec(previous_part) && !re_w_c.exec(previous_part)){ + // sets + var re_dom = new RegExp(DOM.source, "g"); + if (re_dom.exec(previous_part)){ + var re_sets = new RegExp(SET.source, "g"); + + for (var dir = -1; dir <= 1; dir += 2) { + var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; + for (; line != endLine; line += dir) { + var text = editor.getLine(line), m; + while (m = re_sets.exec(text)) { + if (line == cur.line && m[1] === curWord) continue; + if ((!curWord || m[1].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[1])) { + seen[m[1]] = true; + list.push(m[1]); + } } } } - } - // add default sets - var default_sets = hintWords.EN_default_sets(); - for (var i = 0; i < default_sets.length; i++) { - if ((!curWord || default_sets[i].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, default_sets[i])) { - seen[default_sets[i]] = true; - list.push(default_sets[i]); - } - } - }else{ - // get variables of function - var previous_block = ""; - for (var i = 1; i < cur.line; i++){ - previous_block += editor.getLine(i) + '\n'; - } - previous_block += previous_part; - var re_fun = new RegExp(FUN.source, "g"), match, last_match; - while (match = re_fun.exec(previous_block)){ last_match = match }; - if (last_match){ - var vars = last_match[2].replace(/\s/g,'').split(','); - for (var i = 0; i < vars.length; i++) { - if ((!curWord || vars[i].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, vars[i])) { - seen[vars[i]] = true; - list.push(vars[i]); + // add default sets + var default_sets = hintWords.EN_default_sets(); + for (var i = 0; i < default_sets.length; i++) { + if ((!curWord || default_sets[i].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, default_sets[i])) { + seen[default_sets[i]] = true; + list.push(default_sets[i]); } } - } - // get enums - var re_enums = new RegExp(ENUMS.source, "g"); - for (var dir = -1; dir <= 1; dir += 2) { - var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; - for (; line != endLine; line += dir) { - var text = editor.getLine(line), m; - while (m = re_enums.exec(text)) { - var enums = m[1].replace(/\s/g,'').split(','); - for (var i = 0; i < enums.length; i++) { - if ((!curWord || enums[i].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, enums[i])) { - seen[enums[i]] = true; - list.push(enums[i]); + }else{ + // get variables of function + var previous_block = ""; + for (var i = 1; i < cur.line; i++){ + previous_block += editor.getLine(i) + '\n'; + } + previous_block += previous_part; + var re_fun = new RegExp(FUN.source, "g"), match, last_match; + while (match = re_fun.exec(previous_block)){ last_match = match }; + if (last_match){ + var vars = last_match[2].replace(/\s/g,'').split(','); + for (var i = 0; i < vars.length; i++) { + if ((!curWord || vars[i].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, vars[i])) { + seen[vars[i]] = true; + list.push(vars[i]); + } + } + + // get enums + var re_enums = new RegExp(ENUMS.source, "g"); + for (var dir = -1; dir <= 1; dir += 2) { + var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; + for (; line != endLine; line += dir) { + var text = editor.getLine(line), m; + while (m = re_enums.exec(text)) { + var enums = m[1].replace(/\s/g,'').split(','); + for (var i = 0; i < enums.length; i++) { + if ((!curWord || enums[i].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, enums[i])) { + seen[enums[i]] = true; + list.push(enums[i]); + } + } } } } - } - } - // get functions - var re_funs = new RegExp(FUNS.source, "g"); - for (var dir = -1; dir <= 1; dir += 2) { - var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; - for (; line != endLine; line += dir) { - var text = editor.getLine(line), m; - while (m = re_funs.exec(text)) { - if ((!curWord || m[1].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[1])) { - seen[m[1]] = true; - list.push(m[1]); + // get functions + var re_funs = new RegExp(FUNS.source, "g"); + for (var dir = -1; dir <= 1; dir += 2) { + var line = cur.line, endLine = Math.min(Math.max(line + dir * range, editor.firstLine()), editor.lastLine()) + dir; + for (; line != endLine; line += dir) { + var text = editor.getLine(line), m; + while (m = re_funs.exec(text)) { + if ((!curWord || m[1].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, m[1])) { + seen[m[1]] = true; + list.push(m[1]); + } + } + } + } + // add default functions + var default_functions = hintWords.EN_functions(); + for (var i = 0; i < default_functions.length; i++) { + if ((!curWord || default_functions[i].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, default_functions[i])) { + seen[default_functions[i]] = true; + list.push(default_functions[i]); } } - } - } - // add default functions - var default_functions = hintWords.EN_functions(); - for (var i = 0; i < default_functions.length; i++) { - if ((!curWord || default_functions[i].lastIndexOf(curWord, 0) == 0) && !Object.prototype.hasOwnProperty.call(seen, default_functions[i])) { - seen[default_functions[i]] = true; - list.push(default_functions[i]); } } } diff --git a/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts b/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts index adc6dcbef335e660636d6539ab494cd7c6c1f5f2..5f459675ff96a1f32b6f62ddf08b8d982fb31e49 100755 --- a/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts +++ b/Frontend Angular 4/src/app/layout/matefun/matefun.component.ts @@ -418,7 +418,7 @@ export class MateFunComponent { archivoModificado(event){ if (!event.ctrlKey && !event.shiftKey && !event.altKey){ - if (/^[a-zA-Z\_]$/.test(event.key)) + if (/^[\w\_\d]$/.test(event.key)) this.codemirror.instance.showHint(event); if(this.copiaNombreArchivo!=this.archivo.nombre || this.copiaContenidoArchivo != this.archivo.contenido){ this.modificado = true;