Browse Source

HUE-4887 [editor] Query history syntax highlighter does not handle Chinese char properly

Enrico Berti 9 years ago
parent
commit
be851c5
1 changed files with 23 additions and 7 deletions
  1. 23 7
      desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

+ 23 - 7
desktop/core/src/desktop/static/desktop/js/ko.hue-bindings.js

@@ -4147,20 +4147,36 @@
           var tok = new Tokenizer(new Rules().getRules());
           var tok = new Tokenizer(new Rules().getRules());
           var lines = value.split('\n');
           var lines = value.split('\n');
 
 
-          lines.forEach(function (line) {
-            var renderedTokens = [];
-            var tokens = tok.getLineTokens(line);
-
-            if (tokens && tokens.tokens.length) {
+          var renderSimpleLine = function(txt, stringBuilder, tokens) {
+            var screenColumn = 0;
+            var token = tokens[0];
+            var value = token.value;
+            if (value) {
+              screenColumn = txt.$renderToken(stringBuilder, screenColumn, token, value);
+            }
+            for (var i = 1; i < tokens.length; i++) {
+              token = tokens[i];
+              value = token.value;
               try {
               try {
-                new Text(document.createElement('div')).$renderSimpleLine(renderedTokens, tokens.tokens);
+                screenColumn = txt.$renderToken(stringBuilder, screenColumn, token, value);
               }
               }
               catch (e) {
               catch (e) {
                 if (console && console.warn) {
                 if (console && console.warn) {
-                  console.warn(line, 'This line has some parsing errors and it has been skipped.');
+                  console.warn(value, 'This token has some parsing errors and it has been rendered without highlighting.');
                 }
                 }
+                stringBuilder.push(value);
+                screenColumn = screenColumn + value.length;
               }
               }
             }
             }
+          };
+
+          lines.forEach(function (line) {
+            var renderedTokens = [];
+            var tokens = tok.getLineTokens(line);
+
+            if (tokens && tokens.tokens.length) {
+              renderSimpleLine(new Text(document.createElement('div')), renderedTokens, tokens.tokens);
+            }
 
 
             res.push('<div class="ace_line pull-left">' + renderedTokens.join('') + '&nbsp;</div>');
             res.push('<div class="ace_line pull-left">' + renderedTokens.join('') + '&nbsp;</div>');
           })
           })