From 7f01d2453545f0dfb126ff8055def0a25dd592f5 Mon Sep 17 00:00:00 2001
From: Franco Pariani <franco19ps@gmail.com>
Date: Sun, 16 Dec 2018 20:23:40 -0300
Subject: [PATCH] Hint improvements

---
 .../matefun/codemirror/matefun-mode-EN.js     | 183 ++++++++----------
 .../app/layout/matefun/matefun.component.ts   |   2 +-
 2 files changed, 86 insertions(+), 99 deletions(-)

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 77ba8db..ca4816f 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 adc6dcb..5f45967 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;
-- 
GitLab